From ab96092b39c0e49cfeb452fec04bb1b6d1ab5e9a Mon Sep 17 00:00:00 2001 From: suti7yk5032 Date: Sat, 28 Sep 2024 23:41:19 +0900 Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=80=85=E5=90=91=E3=81=91?= =?UTF-8?q?=E3=81=AE=E3=82=B9=E3=83=A9=E3=83=83=E3=82=B7=E3=83=A5=E3=82=B3?= =?UTF-8?q?=E3=83=9E=E3=83=B3=E3=83=89=E3=81=AE=E8=BF=94=E4=BF=A1=E3=82=92?= =?UTF-8?q?embed=E3=81=B8=E7=A7=BB=E8=A1=8C,=20PC=E3=81=AE=E3=83=8B?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=83=8D=E3=83=BC=E3=83=A0=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0,=20PC=E3=81=AE=E6=83=85?= =?UTF-8?q?=E5=A0=B1=E5=8F=96=E5=BE=97=E6=A9=9F=E8=83=BD=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dislocker_slash.py | 280 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 234 insertions(+), 46 deletions(-) diff --git a/dislocker_slash.py b/dislocker_slash.py index 7fe8d71..7969d37 100644 --- a/dislocker_slash.py +++ b/dislocker_slash.py @@ -217,7 +217,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] ユーザーの登録状態を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: cursor.close() @@ -285,7 +285,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] PCの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -308,7 +308,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] キーボードの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -331,7 +331,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] マウスの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -413,7 +413,7 @@ class DL(): return {"result": 1, "about": "user_data_not_found"} except Exception as error: self.log(title=f"[ERROR] PCの使用登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: cursor.close() @@ -474,7 +474,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] PCの使用停止処理中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -497,7 +497,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] ユーザー情報の登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -524,7 +524,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] PCの情報を登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -595,7 +595,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] PCの使用履歴をエクスポート中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -643,7 +643,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] fstop中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} finally: if cursor: @@ -698,7 +698,7 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] PC登録用のワンタイムパスワード発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} def device_onetime_gen(self, **kwargs): @@ -750,11 +750,11 @@ class DL(): except Exception as error: self.log(title=f"[ERROR] デバイス登録用のワンタイムパスワード発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} def show_pc_master_password(self, **kwargs): - if isinstance(kwargs.get("pc_number"), int): - try: + try: + if isinstance(kwargs.get("pc_number"), int): pc_number = int(kwargs.get("pc_number")) cursor = self.db.cursor() @@ -763,11 +763,81 @@ class DL(): pc_master_password = pc_master_password_list[0][0] return {"result": 0, "about": "ok", "output_dict": {"pc_master_password": pc_master_password}} - except Exception as error: + + else: + return {"result": 1, "about": "syntax_error"} + except Exception as error: self.log(title=f"[ERROR] PCのマスターパスワードを取得中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) - return {"result": 1, "about": "error"} - else: - return {"result": 1, "about": "syntax_error"} + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} + + finally: + if cursor: + cursor.close() + + def get_discord_user_id(self, **kwargs): + try: + member_id = int(kwargs["member_id"]) + cursor = self.db.cursor() + cursor.execute("SELECT discord_user_id FROM club_member WHERE member_id = %s", (member_id,)) + discord_user_id_list = cursor.fetchall() + discord_user_id = discord_user_id_list[0][0] + return {"result": 0, "about": "ok", "discord_user_id": discord_user_id} + + except Exception as error: + self.log(title=f"[ERROR] DiscordのユーザーIDの取得中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} + + finally: + if cursor: + cursor.close() + + def get_pc_list(self, **kwargs): + try: + cursor = self.db.cursor() + + if "pc_number" in kwargs: + pc_number = int(kwargs["pc_number"]) + cursor.execute("SELECT * FROM pc_list WHERE pc_number = %s", (pc_number,)) + pc_list = cursor.fetchall() + + return {"result": 0, "about": "ok", "output_dict": {pc_number: {"pc_number": pc_list[0][0], "using_member_id": pc_list[0][1], "master_password": [0][5], "detail": pc_list[0][6], "alt_name": pc_list[0][7]}}} + else: + cursor.execute("SELECT * FROM pc_list ORDER BY pc_number") + pc_list = cursor.fetchall() + pc_list = {} + for i in pc_list: + pc_list[i[0]] = {"pc_number": i[0], "using_member_id": i[1], "master_password": i[5], "detail": i[6], "alt_name": i[7]} + + return {"result": 0, "about": "ok", "output_dict": pc_list} + + except Exception as error: + self.log(title=f"[ERROR] PCリストの取得中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} + + finally: + if cursor: + cursor.close() + + def set_pc_nickname(self, **kwargs): + try: + cursor = self.db.cursor() + + if 'pc_number' in kwargs and 'alt_name' in kwargs: + pc_number = int(kwargs["pc_number"]) + alt_name = kwargs["alt_name"] + cursor.execute("UPDATE pc_list SET alt_name = %s WHERE pc_number = %s", (alt_name, pc_number)) + self.db.commit() + return {"result": 0, "about": "ok"} + else: + return {"result": 1, "about": "syntax_error"} + + except Exception as error: + self.log(title=f"[ERROR] PCのニックネームの設定中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) + return {"result": 1, "about": "error", "output_dict": {"error_class_name": str(error.__class__.__name__), "error_args": str(error.args)}} + + finally: + if cursor: + cursor.close() class ReasonModal(discord.ui.Modal): @@ -953,7 +1023,7 @@ async def on_message(message): if len(msg_split) == 2: if msg_split[1].isdecimal(): max_count = int(msg_split[1]) - + pc_onetime_password_gen = dislocker.pc_onetime_gen(max_count=max_count) if pc_onetime_password_gen["result"] == 0: @@ -962,16 +1032,28 @@ async def on_message(message): 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 message.channel.send(f"# :dizzy_face: PC登録時のワンタイムパスワードを発行します。\n# パスワード | {pc_onetime_password}\n# 最大使用回数 | {pc_onetime_password_max_count}\n# 残り使用回数 | {pc_onetime_password_remaining_times}") + result_embed = discord.Embed(title=":dizzy_face: PCの登録", description=f"PC登録時のワンタイムパスワードを発行します。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=pc_onetime_password) + result_embed.add_field(name="最大使用回数", value=pc_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=pc_onetime_password_remaining_times) + 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 message.channel.send(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {pc_onetime_password}\n# 残り使用回数 | {pc_onetime_password_remaining_times}") + + result_embed = discord.Embed(title=":dizzy_face: PCの登録", description=f"ワンタイムパスワードはもう発行されており、有効です。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=pc_onetime_password) + result_embed.add_field(name="最大使用回数", value=pc_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=pc_onetime_password_remaining_times) + else: - await message.channel.send("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。") + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{pc_onetime_password_gen['output_dict']['error_class_name']}", value=f"{pc_onetime_password_gen['output_dict']['error_args']}") + + await message.channel.send(embed=result_embed) elif msg_split[0] == "/devreg": max_count = 1 @@ -987,19 +1069,31 @@ async def on_message(message): 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 message.channel.send(f"# :dizzy_face: デバイス登録時のワンタイムパスワードを発行します。\n# パスワード | {device_onetime_password}\n# 最大使用回数 | {device_onetime_password_max_count}\n# 残り使用回数 | {device_onetime_password_remaining_times}") + result_embed = discord.Embed(title=":dizzy_face: デバイスの登録", description=f"デバイス登録時のワンタイムパスワードを発行します。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=device_onetime_password) + result_embed.add_field(name="最大使用回数", value=device_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=device_onetime_password_remaining_times) + 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 message.channel.send(f"# :dizzy_face: 既にワンタイムパスワードは発行されています。\n# パスワード | {device_onetime_password}\n# 残り使用回数 | {device_onetime_password_remaining_times}") + result_embed = discord.Embed(title=":dizzy_face: デバイスの登録", description=f"ワンタイムパスワードはもう発行されており、有効です。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=device_onetime_password) + result_embed.add_field(name="最大使用回数", value=device_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=device_onetime_password_remaining_times) + else: - await message.channel.send("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。") + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{device_onetime_password_gen['output_dict']['error_class_name']}", value=f"{device_onetime_password_gen['output_dict']['error_args']}") + + await message.channel.send(embed=result_embed) else: - await message.channel.send("# :warning: DMでの応答は、現在無効化されています。") + result_embed = discord.Embed(title=":x: 警告", description=f'DMでの操作はサポートされていません。', color=0xC91111) + await message.channel.send(embed=result_embed) else: pass @@ -1191,15 +1285,23 @@ async def stop(interaction: discord.Interaction): stop = dislocker.stop(discord_user_id=interaction.user.id) if stop["result"] == 0: await interaction.response.send_message(f":white_check_mark: 使用が終了されました。\n>>> ## PC番号 | {stop['output_dict']['pc_number']}", ephemeral=True) + result_embed = discord.Embed(title=":white_check_mark: 使用停止処理は完了しました。", description=f'PC番号 {stop['output_dict']['pc_number']} 番の使用停止処理が完了しました。', color=0x56FF01) dislocker.log(title=f"[INFO] PC番号{stop['output_dict']['pc_number']} の使用が終了されました。", message=f"名前 | {stop['output_dict']['name']}", flag=0) - await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(f':white_check_mark: {stop["output_dict"]["name"]} さんがPC {stop["output_dict"]["pc_number"]} の使用を終了しました。\n>>> ## PC番号 | {stop["output_dict"]["pc_number"]}') + log_embed = discord.Embed(title=f":information_source: PC番号 {stop['output_dict']['pc_number']} の使用は終了されました。", description=f"<@{interaction.user.id}> によるリクエスト", color=0x2286C9) + await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(embed=log_embed) + elif stop["result"] == 1: if stop["about"] == "unused": - await interaction.response.send_message("# :shaking_face: あなたはPCを使用されていないようです...", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'あなたはPCを使用されていないようです...', color=0xC91111) + elif stop["about"] == "user_data_not_found": - await interaction.response.send_message("# :dizzy_face: ユーザーとして登録されていないようです。\n最初にサーバーで登録を行ってください。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'Dislockerのユーザーとして登録されていないようです。\n登録を行ってから、またお試しください。', color=0xC91111) + elif stop["about"] == "error": - await interaction.response.send_message("# :skull_crossbones: 停止できませんでした。\n内部エラーが発生しています。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{stop['output_dict']['error_class_name']}", value=f"{stop['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) #管理者側のスラッシュコマンド @tree.command(name="userreg", description="ユーザーを登録します。") @@ -1208,13 +1310,18 @@ async def userreg(interaction: discord.Interaction, discord_user_id: str, discor if interaction.guild_id in dislocker.server_config["bot"]["server_id"] or interaction.user.id in 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) + result_embed = discord.Embed(title=":white_check_mark: ユーザー登録が完了しました。", description=f'続いて、PCの使用登録を行いましょう!', color=0x56FF01) 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) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'既に登録されているユーザーです。', color=0xC91111) + elif user_register["about"] == "error": - await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{user_register['output_dict']['error_class_name']}", value=f"{user_register['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) @tree.command(name="pcreg", description="PCをDislockerに登録するためのワンタイムパスワードを発行します。") @discord.app_commands.default_permissions(administrator=True) @@ -1230,16 +1337,28 @@ async def pcreg(interaction: discord.Interaction, how_much: int = 1): 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) + result_embed = discord.Embed(title=":dizzy_face: PCの登録", description=f"PC登録時のワンタイムパスワードを発行します。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=pc_onetime_password) + result_embed.add_field(name="最大使用回数", value=pc_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=pc_onetime_password_remaining_times) + 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) + + result_embed = discord.Embed(title=":dizzy_face: PCの登録", description=f"ワンタイムパスワードはもう発行されており、有効です。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=pc_onetime_password) + result_embed.add_field(name="最大使用回数", value=pc_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=pc_onetime_password_remaining_times) + else: - await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{pc_onetime_password_gen['output_dict']['error_class_name']}", value=f"{pc_onetime_password_gen['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) @tree.command(name="devicereg", description="デバイスをDislockerに登録するためのワンタイムパスワードを発行します。") @discord.app_commands.default_permissions(administrator=True) @@ -1255,16 +1374,28 @@ async def devicereg(interaction: discord.Interaction, how_much: int): 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) + result_embed = discord.Embed(title=":dizzy_face: デバイスの登録", description=f"デバイス登録時のワンタイムパスワードを発行します。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=device_onetime_password) + result_embed.add_field(name="最大使用回数", value=device_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=device_onetime_password_remaining_times) + 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) + result_embed = discord.Embed(title=":dizzy_face: デバイスの登録", description=f"ワンタイムパスワードはもう発行されており、有効です。", color=0x2286C9) + result_embed.add_field(name="パスワード", value=device_onetime_password) + result_embed.add_field(name="最大使用回数", value=device_onetime_password_max_count) + result_embed.add_field(name="残り使用回数", value=device_onetime_password_remaining_times) + else: - await interaction.response.send_message("# :skull_crossbones: ワンタイムパスワードの発行に失敗しました。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{device_onetime_password_gen['output_dict']['error_class_name']}", value=f"{device_onetime_password_gen['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) + @tree.command(name="fstop", description="PCの使用登録を強制的に終了します。") @discord.app_commands.default_permissions(administrator=True) @@ -1272,15 +1403,21 @@ async def fstop(interaction: discord.Interaction, pc_number: int, about: str): if interaction.guild_id in dislocker.server_config["bot"]["server_id"] or interaction.user.id in 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) + result_embed = discord.Embed(title=":white_check_mark: 処理が完了しました。", description=f'PC番号 {str(pc_number)} 番の使用登録は抹消されました。', color=0x56FF01) + 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) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'指定されたPCは使用されていないようです...', color=0xC91111) + elif force_stop["about"] == "bot_about_not_found": - await interaction.response.send_message(":x: 理由が指定されていません。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'強制停止する理由を入力してください。', color=0xC91111) + elif force_stop["about"] == "error": - await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True) + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{force_stop['output_dict']['error_class_name']}", value=f"{force_stop['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) @tree.command(name="report", description="PCの使用履歴をエクスポートします。") @discord.app_commands.default_permissions(administrator=True) @@ -1318,7 +1455,9 @@ async def button_init(interaction: discord.Interaction, text_channel: discord.Te 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) + result_embed = discord.Embed(title=":white_check_mark: 初回処理が完了しました。", description=f'指定したテキストチャンネルをご確認ください。', color=0x56FF01) + + await interaction.response.send_message(embed=result_embed, ephemeral=True) @tree.command(name="masterpass", description="PCのマスターパスワードを表示します。") @discord.app_commands.default_permissions(administrator=True) @@ -1328,9 +1467,58 @@ async def masterpass(interaction: discord.Interaction, pc_number: int): 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) + + result_embed = discord.Embed(title=":information_source: マスターパスワード", description=f"PC番号 {str(pc_number)} 番のマスターパスワードを表示します。", color=0x2286C9) + result_embed.add_field(name=f"マスターパスワード", value=f"{str(pc_master_password)}") + else: - await interaction.response.send_message("# :skull_crossbones: マスターパスワードの取得に失敗しました。", ephemeral=True) + result_embed = discord.Embed(title=":x: 取得に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{pc_master_password_get['output_dict']['error_class_name']}", value=f"{pc_master_password_get['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) + +@tree.command(name="pcinfo", description="PCの情報を表示します。") +@discord.app_commands.default_permissions(administrator=True) +async def pcinfo(interaction: discord.Interaction): + if interaction.guild_id in dislocker.server_config["bot"]["server_id"] or interaction.user.id in dislocker.server_config["bot"]["admin_user_id"]: + pc_list = dislocker.get_pc_list() + + if pc_list["result"] == 0: + result_embed = discord.Embed(title=":information_source: 現在のPCリスト", description="PCリストです。", color=0x2286C9) + + for i in pc_list['output_dict'].keys(): + if i['alt_name'] == None: + pc_name_title = f'{i['pc_number']} 番' + else: + pc_name_title = f'{i['pc_number']} 番 ({i['alt_name']})' + + if i['using_member_id'] == None: + pc_using_value = f'未使用' + else: + discord_user_id = dislocker.get_discord_user_id(i['using_member_id']) + pc_using_value = f'<@{discord_user_id}> が使用中' + + result_embed.add_field(name=f'{pc_name_title}', value=f'{pc_using_value}') + + else: + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。', color=0xC91111) + result_embed.add_field(name=f"{pc_list['output_dict']['error_class_name']}", value=f"{pc_list['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) + +@tree.command(name="pcnickname", description="PCにニックネームを設定します。") +@discord.app_commands.default_permissions(administrator=True) +async def pcnickname(interaction: discord.Interaction, pc_number: int, nickname: str): + if interaction.guild_id in dislocker.server_config["bot"]["server_id"] or interaction.user.id in dislocker.server_config["bot"]["admin_user_id"]: + pc_nickname_set = dislocker.set_pc_nickname(pc_number=pc_number, nickname=nickname) + if pc_nickname_set["result"] == 0: + result_embed = discord.Embed(title=":white_check_mark: 操作が完了しました。", description=f'PC番号 {str(pc_number)} のニックネームは {str(nickname)} に設定されました。', color=0x56FF01) + + else: + result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。ニックネームは変更されません。', color=0xC91111) + result_embed.add_field(name=f"{pc_nickname_set['output_dict']['error_class_name']}", value=f"{pc_nickname_set['output_dict']['error_args']}") + + await interaction.response.send_message(embed=result_embed, ephemeral=True) if dislocker.init_result == "ok":