diff --git a/dislocker.py b/dislocker.py index b932b5f..b45ef14 100644 --- a/dislocker.py +++ b/dislocker.py @@ -898,6 +898,31 @@ class DL(): finally: if cursor: 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): @@ -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.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) 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) +@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": print("Botを起動します...")