Compare commits

...

2 commits

2 changed files with 72 additions and 4 deletions

View file

@ -899,6 +899,31 @@ class DL():
if cursor: if cursor:
cursor.close() cursor.close()
def pc_unregister(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()
if pc_list:
cursor.execute("DELETE FROM pc_list WHERE pc_number = %s", (pc_number,))
self.db.commit()
return {"result": 0, "about": "ok"}
else:
return {"result": 1, "about": "not_exists"}
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):
def __init__(self, title: str, pc_number: str, keyboard_number: str, mouse_number: str, timeout=15) -> None: def __init__(self, title: str, pc_number: str, keyboard_number: str, mouse_number: str, timeout=15) -> None:
@ -1081,6 +1106,14 @@ async def send_log(**kwargs):
log_embed = discord.Embed(title=f":pencil: PC {pc_number} 番 | PCのニックネーム変更通知", description=f"<@{discord_user_id}> さんによってPCのニックネームが変更されました。\nボタンに変更を適用する場合は、再度 /init コマンドでボタンを送信して下さい。\n古いボタンを削除することをお忘れなく!", color=0x1343EB) log_embed = discord.Embed(title=f":pencil: PC {pc_number} 番 | PCのニックネーム変更通知", description=f"<@{discord_user_id}> さんによってPCのニックネームが変更されました。\nボタンに変更を適用する場合は、再度 /init コマンドでボタンを送信して下さい。\n古いボタンを削除することをお忘れなく!", color=0x1343EB)
log_embed.add_field(name="ニックネーム", value=alt_name) log_embed.add_field(name="ニックネーム", value=alt_name)
elif mode == "pcunreg":
alt_name = str(kwargs.get("alt_name"))
if alt_name == None:
log_embed = discord.Embed(title=f":x: PC {pc_number} 番 | PCの登録解除通知", description=f"<@{discord_user_id}> さんによってPCの登録が解除されました。", color=0xE512EB)
else:
log_embed = discord.Embed(title=f":x: PC {pc_number} 番 | PCの登録解除通知", description=f"<@{discord_user_id}> さんによってPCの登録が解除されました。", color=0xE512EB)
log_embed.add_field(name="ニックネーム", value=alt_name)
await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(embed=log_embed) await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(embed=log_embed)
return {"result": 0, "about": "ok"} return {"result": 0, "about": "ok"}
@ -1630,6 +1663,30 @@ async def pcnickname(interaction: discord.Interaction, pc_number: int, nickname:
await interaction.response.send_message(embed=result_embed, ephemeral=True) await interaction.response.send_message(embed=result_embed, ephemeral=True)
@tree.command(name="pcunreg", description="PCの登録を解除します。")
@discord.app_commands.default_permissions(administrator=True)
async def pcunreg(interaction: discord.Interaction, pc_number:int):
if interaction.guild_id in dislocker.server_config["bot"]["server_id"] or interaction.user.id in dislocker.server_config["bot"]["admin_user_id"]:
pc_dict = dislocker.get_pc_list()['output_dict'].get(pc_number)
if pc_dict == None:
result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'指定されたPC番号には登録されていません。', color=0xC91111)
await interaction.response.send_message(embed=result_embed, ephemeral=True)
else:
nickname = pc_dict['alt_name']
pc_unregister = dislocker.pc_unregister(pc_number=pc_number)
if pc_unregister["result"] == 0:
if nickname == None:
result_embed = discord.Embed(title=":white_check_mark: 操作が完了しました。", description=f'PC {str(pc_number)} 番 の登録は解除されました。', color=0x56FF01)
else:
result_embed = discord.Embed(title=":white_check_mark: 操作が完了しました。", description=f'PC {str(pc_number)} 番 | {str(nickname)}の登録は解除されました。', color=0x56FF01)
await send_log(mode="pcunreg", pc_number=pc_number, discord_user_id=interaction.user.id, alt_name=nickname)
else:
result_embed = discord.Embed(title=":x: 操作に失敗しました。", description=f'サーバーでエラーが発生しています。登録は解除されません。', color=0xC91111)
result_embed.add_field(name=f"{pc_unregister['output_dict']['error_class_name']}", value=f"{pc_unregister['output_dict']['error_args']}")
await interaction.response.send_message(embed=result_embed, ephemeral=True)
if dislocker.init_result == "ok": if dislocker.init_result == "ok":
print("Botを起動します...") print("Botを起動します...")

View file

@ -307,18 +307,29 @@ class Auth():
cursor.execute("SELECT pc_uuid FROM pc_list WHERE pc_number = %s", (pc_number,)) cursor.execute("SELECT pc_uuid FROM pc_list WHERE pc_number = %s", (pc_number,))
pc_record = cursor.fetchall() pc_record = cursor.fetchall()
pc_record_uuid = pc_record[0][0] pc_record_uuid = pc_record[0][0]
if pc_record_uuid == None: cursor.execute("SELECT pc_number FROM pc_list WHERE pc_number = %s", (pc_number,))
pc_record = cursor.fetchall()
pc_record_number = pc_record[0][0]
if pc_record_number == None:
pc_token = self.token_generate(36) pc_token = self.token_generate(36)
master_password = self.master_password_generate(16) master_password = self.master_password_generate(16)
master_password_hash = self.hash_genarate(master_password) master_password_hash = self.hash_genarate(master_password)
cursor.execute("UPDATE pc_list SET pc_uuid = %s, pc_token = %s, master_password = %s WHERE pc_number = %s", (pc_uuid, pc_token, master_password, pc_number)) cursor.execute("INSERT INTO pc_list (pc_number, pc_uuid, pc_token, master_password) VALUES (%s, %s, %s, %s)", (pc_number, pc_uuid, pc_token, master_password))
self.db.commit() self.db.commit()
return {"result": 0, "about": "ok", "output_dict": {"pc_token": pc_token, "master_password": master_password, "master_password_hash": master_password_hash}} return {"result": 0, "about": "ok", "output_dict": {"pc_token": pc_token, "master_password": master_password, "master_password_hash": master_password_hash}}
else: else:
return {"result": 1, "about": "exist"} if pc_record_uuid == None:
pc_token = self.token_generate(36)
master_password = self.master_password_generate(16)
master_password_hash = self.hash_genarate(master_password)
cursor.execute("UPDATE pc_list SET pc_uuid = %s, pc_token = %s, master_password = %s WHERE pc_number = %s", (pc_uuid, pc_token, master_password, pc_number))
self.db.commit()
return {"result": 0, "about": "ok", "output_dict": {"pc_token": pc_token, "master_password": master_password, "master_password_hash": master_password_hash}}
else:
return {"result": 1, "about": "exist"}
except Exception as error: except Exception as error:
print("停止処理中にエラーが発生しました。\nエラー内容") print("PCの登録処理中にエラーが発生しました。\nエラー内容")
print(str(error.__class__.__name__)) print(str(error.__class__.__name__))
print(str(error.args)) print(str(error.args))
print(str(error)) print(str(error))