管理者向けのスラッシュコマンドの返信をembedへ移行, PCのニックネーム設定機能追加, PCの情報取得機能追加

This commit is contained in:
suti7yk5032 2024-09-28 23:41:19 +09:00
parent cb3bc05faf
commit ab96092b39

View file

@ -217,7 +217,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] ユーザーの登録状態を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
cursor.close() cursor.close()
@ -285,7 +285,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PCの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -308,7 +308,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] キーボードの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -331,7 +331,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] マウスの使用状況を調査中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -413,7 +413,7 @@ class DL():
return {"result": 1, "about": "user_data_not_found"} return {"result": 1, "about": "user_data_not_found"}
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PCの使用登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
cursor.close() cursor.close()
@ -474,7 +474,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PCの使用停止処理中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -497,7 +497,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] ユーザー情報の登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -524,7 +524,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PCの情報を登録中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -595,7 +595,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PCの使用履歴をエクスポート中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -643,7 +643,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] fstop中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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: finally:
if cursor: if cursor:
@ -698,7 +698,7 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] PC登録用のワンタイムパスワード発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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): def device_onetime_gen(self, **kwargs):
@ -750,11 +750,11 @@ class DL():
except Exception as error: except Exception as error:
self.log(title=f"[ERROR] デバイス登録用のワンタイムパスワード発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1) 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): 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")) pc_number = int(kwargs.get("pc_number"))
cursor = self.db.cursor() cursor = self.db.cursor()
@ -763,11 +763,81 @@ class DL():
pc_master_password = pc_master_password_list[0][0] pc_master_password = pc_master_password_list[0][0]
return {"result": 0, "about": "ok", "output_dict": {"pc_master_password": pc_master_password}} 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) 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)}}
else:
return {"result": 1, "about": "syntax_error"} 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): class ReasonModal(discord.ui.Modal):
@ -953,7 +1023,7 @@ async def on_message(message):
if len(msg_split) == 2: if len(msg_split) == 2:
if msg_split[1].isdecimal(): if msg_split[1].isdecimal():
max_count = int(msg_split[1]) max_count = int(msg_split[1])
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: 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_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)) 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: elif pc_onetime_password_gen["result"] == 1:
if pc_onetime_password_gen["about"] == "already_exists": if pc_onetime_password_gen["about"] == "already_exists":
pc_onetime_password = str(pc_onetime_password_gen["output_dict"]["onetime_password"]) 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_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_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)) 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: 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": elif msg_split[0] == "/devreg":
max_count = 1 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_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)) 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: elif device_onetime_password_gen["result"] == 1:
if device_onetime_password_gen["about"] == "already_exists": if device_onetime_password_gen["about"] == "already_exists":
device_onetime_password = str(device_onetime_password_gen["output_dict"]["onetime_password"]) 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_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_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)) 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: 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: 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: else:
pass pass
@ -1191,15 +1285,23 @@ async def stop(interaction: discord.Interaction):
stop = dislocker.stop(discord_user_id=interaction.user.id) stop = dislocker.stop(discord_user_id=interaction.user.id)
if stop["result"] == 0: if stop["result"] == 0:
await interaction.response.send_message(f":white_check_mark: 使用が終了されました。\n>>> ## PC番号 | {stop['output_dict']['pc_number']}", ephemeral=True) 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) 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: elif stop["result"] == 1:
if stop["about"] == "unused": 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": 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": 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="ユーザーを登録します。") @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"]: 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) user_register = dislocker.user_register(discord_user_id=discord_user_id, discord_user_name=discord_user_name, name=name)
if user_register["result"] == 0: 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) dislocker.log(title=f"[INFO] ユーザーを登録しました。", message=f"名前 | {name}, Discordユーザー名 | {discord_user_name}, DiscordユーザーID | {discord_user_id}", flag=0)
elif user_register["result"] == 1: elif user_register["result"] == 1:
if user_register["about"] == "already_exists": 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": 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に登録するためのワンタイムパスワードを発行します。") @tree.command(name="pcreg", description="PCをDislockerに登録するためのワンタイムパスワードを発行します。")
@discord.app_commands.default_permissions(administrator=True) @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_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)) 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: elif pc_onetime_password_gen["result"] == 1:
if pc_onetime_password_gen["about"] == "already_exists": if pc_onetime_password_gen["about"] == "already_exists":
pc_onetime_password = str(pc_onetime_password_gen["output_dict"]["onetime_password"]) 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_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_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)) 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: 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に登録するためのワンタイムパスワードを発行します。") @tree.command(name="devicereg", description="デバイスをDislockerに登録するためのワンタイムパスワードを発行します。")
@discord.app_commands.default_permissions(administrator=True) @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_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)) 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: elif device_onetime_password_gen["result"] == 1:
if device_onetime_password_gen["about"] == "already_exists": if device_onetime_password_gen["about"] == "already_exists":
device_onetime_password = str(device_onetime_password_gen["output_dict"]["onetime_password"]) 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_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_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)) 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: 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の使用登録を強制的に終了します。") @tree.command(name="fstop", description="PCの使用登録を強制的に終了します。")
@discord.app_commands.default_permissions(administrator=True) @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"]: 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) force_stop = dislocker.force_stop(pc_number=pc_number, bot_about=about)
if force_stop["result"] == 0: 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) dislocker.log(title=f"[INFO] PC {pc_number} の使用を強制終了しました。", message=f"理由 | {about}", flag=0)
elif force_stop["result"] == 1: elif force_stop["result"] == 1:
if force_stop["about"] == "not_used": 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": 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": 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の使用履歴をエクスポートします。") @tree.command(name="report", description="PCの使用履歴をエクスポートします。")
@discord.app_commands.default_permissions(administrator=True) @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) 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) 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のマスターパスワードを表示します。") @tree.command(name="masterpass", description="PCのマスターパスワードを表示します。")
@discord.app_commands.default_permissions(administrator=True) @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: if pc_master_password_get["result"] == 0:
pc_master_password = pc_master_password_get["output_dict"]["pc_master_password"] 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: 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": if dislocker.init_result == "ok":