diff --git a/dislocker_slash.py b/dislocker_slash.py index 4759b18..0ccb343 100644 --- a/dislocker_slash.py +++ b/dislocker_slash.py @@ -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 - - 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 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) + + 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 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 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 dislocker.init_result == "ok":