管理者コマンドのセキュリティの向上
This commit is contained in:
parent
8775b22738
commit
364b32c0e7
1 changed files with 87 additions and 79 deletions
|
@ -37,6 +37,7 @@ class DL():
|
|||
"password": "password"
|
||||
},
|
||||
"bot": {
|
||||
"server_id": "TYPE HERE SERVER ID",
|
||||
"token": "TYPE HERE BOTS TOKEN KEY",
|
||||
"activity": {
|
||||
"name": "Dislocker",
|
||||
|
@ -1204,125 +1205,132 @@ async def stop(interaction: discord.Interaction):
|
|||
@tree.command(name="userreg", description="ユーザーを登録します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def userreg(interaction: discord.Interaction, discord_user_id: str, discord_user_name: str, name: str):
|
||||
user_register = dislocker.user_register(discord_user_id=discord_user_id, discord_user_name=discord_user_name, name=name)
|
||||
if user_register["result"] == 0:
|
||||
await interaction.response.send_message(":white_check_mark: ユーザーを登録しました。", ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] ユーザーを登録しました。", message=f"名前 | {name}, Discordユーザー名 | {discord_user_name}, DiscordユーザーID | {discord_user_id}", flag=0)
|
||||
elif user_register["result"] == 1:
|
||||
if user_register["about"] == "already_exists":
|
||||
await interaction.response.send_message(":x: 既に登録されているユーザーです。", ephemeral=True)
|
||||
elif user_register["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
user_register = dislocker.user_register(discord_user_id=discord_user_id, discord_user_name=discord_user_name, name=name)
|
||||
if user_register["result"] == 0:
|
||||
await interaction.response.send_message(":white_check_mark: ユーザーを登録しました。", ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] ユーザーを登録しました。", message=f"名前 | {name}, Discordユーザー名 | {discord_user_name}, DiscordユーザーID | {discord_user_id}", flag=0)
|
||||
elif user_register["result"] == 1:
|
||||
if user_register["about"] == "already_exists":
|
||||
await interaction.response.send_message(":x: 既に登録されているユーザーです。", ephemeral=True)
|
||||
elif user_register["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
|
||||
@tree.command(name="pcreg", description="PCをDislockerに登録するためのワンタイムパスワードを発行します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def pcreg(interaction: discord.Interaction, how_much: int = 1):
|
||||
max_count = how_much
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
max_count = how_much
|
||||
|
||||
pc_onetime_password_gen = dislocker.pc_onetime_gen(max_count=max_count)
|
||||
pc_onetime_password_gen = dislocker.pc_onetime_gen(max_count=max_count)
|
||||
|
||||
if pc_onetime_password_gen["result"] == 0:
|
||||
pc_onetime_password = str(pc_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
pc_onetime_password_max_count = str(pc_onetime_password_gen["output_dict"]["max_count"])
|
||||
pc_onetime_password_current_count = str(pc_onetime_password_gen["output_dict"]["current_count"])
|
||||
pc_onetime_password_remaining_times = str(int(pc_onetime_password_max_count) - int(pc_onetime_password_current_count))
|
||||
|
||||
await interaction.response.send_message(f"# :dizzy_face: PC登録時のワンタイムパスワードを発行します。\n# パスワード | {pc_onetime_password}\n# 最大使用回数 | {pc_onetime_password_max_count}\n# 残り使用回数 | {pc_onetime_password_remaining_times}", ephemeral=True)
|
||||
elif pc_onetime_password_gen["result"] == 1:
|
||||
if pc_onetime_password_gen["about"] == "already_exists":
|
||||
if pc_onetime_password_gen["result"] == 0:
|
||||
pc_onetime_password = str(pc_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
pc_onetime_password_max_count = str(pc_onetime_password_gen["output_dict"]["max_count"])
|
||||
pc_onetime_password_current_count = str(pc_onetime_password_gen["output_dict"]["current_count"])
|
||||
pc_onetime_password_remaining_times = str(int(pc_onetime_password_max_count) - int(pc_onetime_password_current_count))
|
||||
await interaction.response.send_message(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {pc_onetime_password}\n# 残り使用回数 | {pc_onetime_password_remaining_times}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True)
|
||||
|
||||
await interaction.response.send_message(f"# :dizzy_face: PC登録時のワンタイムパスワードを発行します。\n# パスワード | {pc_onetime_password}\n# 最大使用回数 | {pc_onetime_password_max_count}\n# 残り使用回数 | {pc_onetime_password_remaining_times}", ephemeral=True)
|
||||
elif pc_onetime_password_gen["result"] == 1:
|
||||
if pc_onetime_password_gen["about"] == "already_exists":
|
||||
pc_onetime_password = str(pc_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
pc_onetime_password_max_count = str(pc_onetime_password_gen["output_dict"]["max_count"])
|
||||
pc_onetime_password_current_count = str(pc_onetime_password_gen["output_dict"]["current_count"])
|
||||
pc_onetime_password_remaining_times = str(int(pc_onetime_password_max_count) - int(pc_onetime_password_current_count))
|
||||
await interaction.response.send_message(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {pc_onetime_password}\n# 残り使用回数 | {pc_onetime_password_remaining_times}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True)
|
||||
|
||||
@tree.command(name="devicereg", description="デバイスをDislockerに登録するためのワンタイムパスワードを発行します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def devicereg(interaction: discord.Interaction, how_much: int):
|
||||
max_count = how_much
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
max_count = how_much
|
||||
|
||||
device_onetime_password_gen = dislocker.device_onetime_gen(max_count=max_count)
|
||||
device_onetime_password_gen = dislocker.device_onetime_gen(max_count=max_count)
|
||||
|
||||
if device_onetime_password_gen["result"] == 0:
|
||||
device_onetime_password = str(device_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
device_onetime_password_max_count = str(device_onetime_password_gen["output_dict"]["max_count"])
|
||||
device_onetime_password_current_count = str(device_onetime_password_gen["output_dict"]["current_count"])
|
||||
device_onetime_password_remaining_times = str(int(device_onetime_password_max_count) - int(device_onetime_password_current_count))
|
||||
|
||||
await interaction.response.send_message(f"# :dizzy_face: デバイス登録時のワンタイムパスワードを発行します。\n# パスワード | {device_onetime_password}\n# 最大使用回数 | {device_onetime_password_max_count}\n# 残り使用回数 | {device_onetime_password_remaining_times}", ephemeral=True)
|
||||
elif device_onetime_password_gen["result"] == 1:
|
||||
if device_onetime_password_gen["about"] == "already_exists":
|
||||
if device_onetime_password_gen["result"] == 0:
|
||||
device_onetime_password = str(device_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
device_onetime_password_max_count = str(device_onetime_password_gen["output_dict"]["max_count"])
|
||||
device_onetime_password_current_count = str(device_onetime_password_gen["output_dict"]["current_count"])
|
||||
device_onetime_password_remaining_times = str(int(device_onetime_password_max_count) - int(device_onetime_password_current_count))
|
||||
await interaction.response.send_message(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {device_onetime_password}\n# 残り使用回数 | {device_onetime_password_remaining_times}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True)
|
||||
|
||||
await interaction.response.send_message(f"# :dizzy_face: デバイス登録時のワンタイムパスワードを発行します。\n# パスワード | {device_onetime_password}\n# 最大使用回数 | {device_onetime_password_max_count}\n# 残り使用回数 | {device_onetime_password_remaining_times}", ephemeral=True)
|
||||
elif device_onetime_password_gen["result"] == 1:
|
||||
if device_onetime_password_gen["about"] == "already_exists":
|
||||
device_onetime_password = str(device_onetime_password_gen["output_dict"]["onetime_password"])
|
||||
device_onetime_password_max_count = str(device_onetime_password_gen["output_dict"]["max_count"])
|
||||
device_onetime_password_current_count = str(device_onetime_password_gen["output_dict"]["current_count"])
|
||||
device_onetime_password_remaining_times = str(int(device_onetime_password_max_count) - int(device_onetime_password_current_count))
|
||||
await interaction.response.send_message(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {device_onetime_password}\n# 残り使用回数 | {device_onetime_password_remaining_times}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True)
|
||||
|
||||
@tree.command(name="fstop", description="PCの使用登録を強制的に終了します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def fstop(interaction: discord.Interaction, pc_number: int, about: str):
|
||||
force_stop = dislocker.force_stop(pc_number=pc_number, bot_about=about)
|
||||
if force_stop["result"] == 0:
|
||||
await interaction.response.send_message(f":white_check_mark: PC {pc_number} の使用を強制終了しました。", ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] PC {pc_number} の使用を強制終了しました。", message=f"理由 | {about}", flag=0)
|
||||
elif force_stop["result"] == 1:
|
||||
if force_stop["about"] == "not_used":
|
||||
await interaction.response.send_message(":x: そのPCは使用されていません。", ephemeral=True)
|
||||
elif force_stop["about"] == "bot_about_not_found":
|
||||
await interaction.response.send_message(":x: 理由が指定されていません。", ephemeral=True)
|
||||
elif force_stop["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
force_stop = dislocker.force_stop(pc_number=pc_number, bot_about=about)
|
||||
if force_stop["result"] == 0:
|
||||
await interaction.response.send_message(f":white_check_mark: PC {pc_number} の使用を強制終了しました。", ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] PC {pc_number} の使用を強制終了しました。", message=f"理由 | {about}", flag=0)
|
||||
elif force_stop["result"] == 1:
|
||||
if force_stop["about"] == "not_used":
|
||||
await interaction.response.send_message(":x: そのPCは使用されていません。", ephemeral=True)
|
||||
elif force_stop["about"] == "bot_about_not_found":
|
||||
await interaction.response.send_message(":x: 理由が指定されていません。", ephemeral=True)
|
||||
elif force_stop["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
|
||||
@tree.command(name="report", description="PCの使用履歴をエクスポートします。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def report(interaction: discord.Interaction):
|
||||
report_export = dislocker.report_export()
|
||||
if report_export["result"] == 0:
|
||||
await interaction.response.send_message(f":white_check_mark: 使用履歴のレポートです。", file=discord.File(report_export["file_path"]), ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] PCの使用履歴をエクスポートしました。", message=f"ファイルパス | {report_export['file_path']}", flag=0)
|
||||
elif report_export["result"] == 1:
|
||||
if report_export["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
report_export = dislocker.report_export()
|
||||
if report_export["result"] == 0:
|
||||
await interaction.response.send_message(f":white_check_mark: 使用履歴のレポートです。", file=discord.File(report_export["file_path"]), ephemeral=True)
|
||||
dislocker.log(title=f"[INFO] PCの使用履歴をエクスポートしました。", message=f"ファイルパス | {report_export['file_path']}", flag=0)
|
||||
elif report_export["result"] == 1:
|
||||
if report_export["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
|
||||
@tree.command(name="init", description="操作チャンネルにボタン一式を送信します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def button_init(interaction: discord.Interaction, text_channel: discord.TextChannel):
|
||||
user_register_button_view = discord.ui.View(timeout=None)
|
||||
user_register_button = discord.ui.Button(style=discord.ButtonStyle.green, label="ユーザー登録", custom_id="user_register")
|
||||
user_register_button_view.add_item(user_register_button)
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
user_register_button_view = discord.ui.View(timeout=None)
|
||||
user_register_button = discord.ui.Button(style=discord.ButtonStyle.green, label="ユーザー登録", custom_id="user_register")
|
||||
user_register_button_view.add_item(user_register_button)
|
||||
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: ユーザー登録はお済ですか?', view=user_register_button_view)
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: ユーザー登録はお済ですか?', view=user_register_button_view)
|
||||
|
||||
stop_button_view = discord.ui.View(timeout=None)
|
||||
stop_button = discord.ui.Button(style=discord.ButtonStyle.danger, label="PCの使用を停止", custom_id="stop")
|
||||
stop_button_view.add_item(stop_button)
|
||||
stop_button_view = discord.ui.View(timeout=None)
|
||||
stop_button = discord.ui.Button(style=discord.ButtonStyle.danger, label="PCの使用を停止", custom_id="stop")
|
||||
stop_button_view.add_item(stop_button)
|
||||
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: 使用を停止しますか?', view=stop_button_view)
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: 使用を停止しますか?', view=stop_button_view)
|
||||
|
||||
pc_button_view = discord.ui.View(timeout=None)
|
||||
for i in dislocker.pc_list:
|
||||
pc_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label=f"{str(i)}", custom_id=f"pcregister_{str(i)}")
|
||||
pc_button_view.add_item(pc_register_button)
|
||||
pc_button_view = discord.ui.View(timeout=None)
|
||||
for i in dislocker.pc_list:
|
||||
pc_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label=f"{str(i)}", custom_id=f"pcregister_{str(i)}")
|
||||
pc_button_view.add_item(pc_register_button)
|
||||
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: 使いたいPCの番号を選んでください!', view=pc_button_view)
|
||||
dislocker.log(title=f"[INFO] サーバーで初回処理を実行しました。", flag=0)
|
||||
await client.get_channel(text_channel.id).send(f'# :index_pointing_at_the_viewer: 使いたいPCの番号を選んでください!', view=pc_button_view)
|
||||
dislocker.log(title=f"[INFO] サーバーで初回処理を実行しました。", flag=0)
|
||||
|
||||
await interaction.response.send_message(f":white_check_mark: ボタンを送信しました!", ephemeral=True)
|
||||
await interaction.response.send_message(f":white_check_mark: ボタンを送信しました!", ephemeral=True)
|
||||
|
||||
@tree.command(name="masterpass", description="PCのマスターパスワードを表示します。")
|
||||
@discord.app_commands.default_permissions(administrator=True)
|
||||
async def masterpass(interaction: discord.Interaction, pc_number: int):
|
||||
pc_master_password_get = dislocker.show_pc_master_password(pc_number=pc_number)
|
||||
if interaction.guild_id == dislocker.server_config["bot"]["server_id"] or interaction.user.id == dislocker.server_config["bot"]["admin_user_id"]:
|
||||
pc_master_password_get = dislocker.show_pc_master_password(pc_number=pc_number)
|
||||
|
||||
if pc_master_password_get["result"] == 0:
|
||||
pc_master_password = pc_master_password_get["output_dict"]["pc_master_password"]
|
||||
await interaction.response.send_message(f"# :key: PC番号 {pc_number} 番のマスターパスワードは以下の通りです。\n>>> # マスターパスワード | {pc_master_password}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: マスターパスワードの取得に失敗しました。", ephemeral=True)
|
||||
if pc_master_password_get["result"] == 0:
|
||||
pc_master_password = pc_master_password_get["output_dict"]["pc_master_password"]
|
||||
await interaction.response.send_message(f"# :key: PC番号 {pc_number} 番のマスターパスワードは以下の通りです。\n>>> # マスターパスワード | {pc_master_password}", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: マスターパスワードの取得に失敗しました。", ephemeral=True)
|
||||
|
||||
|
||||
if dislocker.init_result == "ok":
|
||||
|
|
Loading…
Reference in a new issue