ボタン周りの機能を移植してくる
This commit is contained in:
parent
db16ddce29
commit
f1967f0388
1 changed files with 231 additions and 0 deletions
|
@ -701,6 +701,67 @@ class DL():
|
|||
self.log(title=f"[ERROR] デバイス登録用のワンタイムパスワードを発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1)
|
||||
return {"result": 1, "about": "error"}
|
||||
|
||||
|
||||
class ReasonModal(discord.ui.Modal):
|
||||
def __init__(self, title: str, pc_number: str, keyboard_number: str, mouse_number: str, timeout=15) -> None:
|
||||
super().__init__(title=title, timeout=timeout)
|
||||
self.reason_input_form = discord.ui.TextInput(label="使用目的を入力してください", style=discord.ui.TextInput.short, custom_id=f"register_{pc_number}_{keyboard_number}_{mouse_number}")
|
||||
self.add_item(self.reason_input_form)
|
||||
|
||||
async def on_submit(self, interaction: discord.Interaction) -> None:
|
||||
custom_id = interaction.data["components"][0]["components"][0]["custom_id"]
|
||||
custom_id_split = custom_id.split("_")
|
||||
pc_number = custom_id_split[1]
|
||||
keyboard_number = custom_id_split[2]
|
||||
mouse_number = custom_id_split[3]
|
||||
|
||||
if keyboard_number == "own":
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = keyboard_number
|
||||
|
||||
if mouse_number == "own":
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = mouse_number
|
||||
|
||||
register = dislocker.register(discord_user_id=interaction.user.id, name=interaction.user.name, display_name=interaction.user.display_name, pc_number=pc_number, keyboard_number=keyboard_number, mouse_number=mouse_number, detail=self.reason_input_form.value)
|
||||
|
||||
if register["about"] == "ok":
|
||||
await interaction.response.send_message(f":white_check_mark: 使用が開始されました。\n>>> # パスワード | {register["output_dict"]["password"]}\n## PC番号 | {pc_number}\n## キーボード番号 | {keyboard_number_show}\n## マウス番号 | {mouse_number_show}\n## 使用目的 | {self.reason_input_form.value}", ephemeral=True)
|
||||
await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(f':white_check_mark: {register["output_dict"]["name"]} さんがPC {pc_number} の使用を開始しました。\n>>> ## PC番号 | {pc_number}\n## キーボード番号 | {keyboard_number_show}\n## マウス番号 | {mouse_number_show}\n## 使用目的 | {self.reason_input_form.value}')
|
||||
dislocker.log(title=f"[INFO] PC番号{pc_number} の使用が開始されました。", message=f"名前 | {register["output_dict"]["name"]}, 使用目的 | {self.reason_input_form.value}", flag=0)
|
||||
elif register["about"] == "pc_already_in_use_by_you":
|
||||
pc_usage_history = register["pc_usage_history"]
|
||||
if pc_usage_history["keyboard_number"] == None:
|
||||
keyboard_number_show = "未認証"
|
||||
elif pc_usage_history["keyboard_number"] == 0:
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = str(pc_usage_history["keyboard_number"])
|
||||
|
||||
if pc_usage_history["mouse_number"] == None:
|
||||
mouse_number_show = "未認証"
|
||||
elif pc_usage_history["mouse_number"] == 0:
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = str(pc_usage_history["mouse_number"])
|
||||
|
||||
await interaction.response.send_message(f"# :exploding_head: あなたはPCをもう使用されているようです。\n使用状態を解除するには 終了ボタン で使用終了をお知らせください。\n>>> # PC番号 | {pc_usage_history["pc_number"]}\n# キーボード番号 | {keyboard_number_show}\n# マウス番号 | {mouse_number_show}\n# 使用開始時刻 | {pc_usage_history["start_time"]}", ephemeral=True)
|
||||
#await interaction.response.send_message(f"# :exploding_head: あなたはPCをもう使用されているようです。\n使用状態を解除するには 終了ボタン で使用終了をお知らせください。\n>>> # PC番号 | {pc_usage_history["pc_number"]}\n# キーボード番号 | {keyboard_number_show}\n# マウス番号 | {mouse_number_show}\n# 使用開始時刻 | {pc_usage_history["start_time"]}\n# 使用目的 | {pc_usage_history["use_detail"]}", ephemeral=True)
|
||||
|
||||
elif register["about"] == "pc_already_in_use_by_other":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのPCは他のメンバーによって使用されています。\n別のPC番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "keyboard_already_in_use":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのキーボードは他のメンバーによって使用されています。\n別のキーボードのデバイス番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "mouse_already_in_use":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのマウスは他のメンバーによって使用されています。\n別のマウスのデバイス番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "user_data_not_found":
|
||||
await interaction.response.send_message("# :dizzy_face: ユーザーとして登録されていないようです。\n最初にサーバーで登録を行ってください。", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: 登録できませんでした。\n内部エラーが発生しています。", ephemeral=True)
|
||||
|
||||
|
||||
dislocker = DL()
|
||||
|
||||
intents = discord.Intents.default()
|
||||
|
@ -718,6 +779,154 @@ async def on_ready():
|
|||
print("------")
|
||||
await tree.sync()
|
||||
|
||||
@client.event
|
||||
async def on_button(interaction: discord.Interaction):
|
||||
custom_id = interaction.data["custom_id"]
|
||||
custom_id_split = custom_id.split("_")
|
||||
dislocker.log(title=f"[INFO] ボタンが押されました。", message=f"custom_id | {custom_id}, DiscordユーザーID | {interaction.user.id}", flag=0)
|
||||
|
||||
if custom_id_split[0] == "pcregister":
|
||||
keyboard_register_view = discord.ui.View(timeout=15)
|
||||
pc_number = custom_id_split[1]
|
||||
for i in dislocker.keyboard_list:
|
||||
keyboard_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label=f"{str(i)}", custom_id=f"keyboardregister_{str(pc_number)}_{str(i)}")
|
||||
keyboard_register_view.add_item(keyboard_register_button)
|
||||
keyboard_not_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="キーボードは自前", custom_id=f"keyboardregister_{str(pc_number)}_own")
|
||||
keyboard_register_view.add_item(keyboard_not_register_button)
|
||||
|
||||
await interaction.response.send_message(f"# :keyboard: キーボードのデバイス番号を選んでください!\n>>> # PC番号 | {str(pc_number)}", view=keyboard_register_view, ephemeral=True)
|
||||
|
||||
elif custom_id_split[0] == "keyboardregister":
|
||||
mouse_register_view = discord.ui.View(timeout=15)
|
||||
pc_number = custom_id_split[1]
|
||||
keyboard_number = custom_id_split[2]
|
||||
if keyboard_number == "own":
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = keyboard_number
|
||||
for i in dislocker.mouse_list:
|
||||
mouse_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label=f"{str(i)}", custom_id=f"mouseregister_{str(pc_number)}_{str(keyboard_number)}_{str(i)}")
|
||||
mouse_register_view.add_item(mouse_register_button)
|
||||
mouse_not_register_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="マウスは自前", custom_id=f"mouseregister_{str(pc_number)}_{str(keyboard_number)}_own")
|
||||
mouse_register_view.add_item(mouse_not_register_button)
|
||||
|
||||
await interaction.response.send_message(f"# :mouse_three_button: マウスのデバイス番号を選んでください!\n>>> # PC番号 | {str(pc_number)}\n# キーボード番号 | {str(keyboard_number_show)}", view=mouse_register_view, ephemeral=True)
|
||||
|
||||
elif custom_id_split[0] == "mouseregister":
|
||||
pc_number = custom_id_split[1]
|
||||
keyboard_number = custom_id_split[2]
|
||||
mouse_number = custom_id_split[3]
|
||||
|
||||
if keyboard_number == "own":
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = keyboard_number
|
||||
|
||||
if mouse_number == "own":
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = mouse_number
|
||||
|
||||
reason_register_view = discord.ui.View(timeout=15)
|
||||
for i in dislocker.preset_games:
|
||||
reason_quick_button = reason_button = discord.ui.Button(style=discord.ButtonStyle.primary, label=f"{str(i)}", custom_id=f"quickreasonregister_{str(pc_number)}_{str(keyboard_number)}_{str(mouse_number)}_{str(i)}")
|
||||
reason_register_view.add_item(reason_quick_button)
|
||||
reason_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="使用目的を入力する", custom_id=f"reasonregister_{str(pc_number)}_{str(keyboard_number)}_{str(mouse_number)}")
|
||||
reason_register_view.add_item(reason_button)
|
||||
|
||||
await interaction.response.send_message(f"# :regional_indicator_q: 使用目的を書いてください!\n>>> # PC番号 | {str(pc_number)}\n# キーボード番号 | {str(keyboard_number_show)}\n# マウス番号 | {str(mouse_number_show)}", view=reason_register_view, ephemeral=True)
|
||||
|
||||
elif custom_id_split[0] == "quickreasonregister":
|
||||
pc_number = custom_id_split[1]
|
||||
keyboard_number = custom_id_split[2]
|
||||
mouse_number = custom_id_split[3]
|
||||
|
||||
if keyboard_number == "own":
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = keyboard_number
|
||||
|
||||
if mouse_number == "own":
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = mouse_number
|
||||
|
||||
reason = custom_id_split[4]
|
||||
|
||||
register = dislocker.register(discord_user_id=interaction.user.id, name=interaction.user.name, display_name=interaction.user.display_name, pc_number=pc_number, keyboard_number=keyboard_number, mouse_number=mouse_number, detail=reason)
|
||||
if register["about"] == "ok":
|
||||
await interaction.response.send_message(f":white_check_mark: 使用が開始されました。\n>>> # パスワード | {register["output_dict"]["password"]}\n## PC番号 | {pc_number}\n## キーボード番号 | {str(keyboard_number_show)}\n## マウス番号 | {str(mouse_number_show)}\n## 使用目的 | {reason}", ephemeral=True)
|
||||
await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(f':white_check_mark: {register["output_dict"]["name"]} さんがPC {pc_number} の使用を開始しました。\n>>> ## PC番号 | {pc_number}\n## 使用目的 | {reason}')
|
||||
dislocker.log(title=f"[INFO] PC番号{pc_number} の使用が開始されました。", message=f"名前 | {register["output_dict"]["name"]}, 使用目的 | {reason}", flag=0)
|
||||
elif register["about"] == "pc_already_in_use_by_you":
|
||||
pc_usage_history = register["pc_usage_history"]
|
||||
if pc_usage_history["keyboard_number"] == None:
|
||||
keyboard_number_show = "未認証"
|
||||
elif pc_usage_history["keyboard_number"] == 0:
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = str(pc_usage_history["keyboard_number"])
|
||||
|
||||
if pc_usage_history["mouse_number"] == None:
|
||||
mouse_number_show = "未認証"
|
||||
elif pc_usage_history["mouse_number"] == 0:
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = str(pc_usage_history["mouse_number"])
|
||||
await interaction.response.send_message(f"# :exploding_head: あなたはPCをもう使用されているようです。\n使用状態を解除するには 終了ボタン で使用終了をお知らせください。\n>>> # PC番号 | {pc_usage_history["pc_number"]}\n# キーボード番号 | {keyboard_number_show}\n# マウス番号 | {mouse_number_show}\n# 使用開始時刻 | {pc_usage_history["start_time"]}", ephemeral=True)
|
||||
#await interaction.response.send_message(f"# :exploding_head: あなたはPCをもう使用されているようです。\n使用状態を解除するには 終了ボタン で使用終了をお知らせください。\n>>> # PC番号 | {pc_usage_history["pc_number"]}\n# キーボード番号 | {keyboard_number_show}\n# マウス番号 | {mouse_number_show}\n# 使用開始時刻 | {pc_usage_history["start_time"]}\n# 使用目的 | {pc_usage_history["use_detail"]}", ephemeral=True)
|
||||
elif register["about"] == "pc_already_in_use_by_other":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのPCは他のメンバーによって使用されています。\n別のPC番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "keyboard_already_in_use":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのキーボードは他のメンバーによって使用されています。\n別のキーボードのデバイス番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "mouse_already_in_use":
|
||||
await interaction.response.send_message(f"# :man_gesturing_no: そのマウスは他のメンバーによって使用されています。\n別のマウスのデバイス番号を指定して、再度お試しください。", ephemeral=True)
|
||||
elif register["about"] == "user_data_not_found":
|
||||
await interaction.response.send_message("# :dizzy_face: ユーザーとして登録されていないようです。\n最初にサーバーで登録を行ってください。", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: 登録できませんでした。\n内部エラーが発生しています。", ephemeral=True)
|
||||
|
||||
elif custom_id_split[0] == "reasonregister":
|
||||
pc_number = custom_id_split[1]
|
||||
keyboard_number = custom_id_split[2]
|
||||
mouse_number = custom_id_split[3]
|
||||
|
||||
if keyboard_number == "own":
|
||||
keyboard_number_show = "自前"
|
||||
else:
|
||||
keyboard_number_show = keyboard_number
|
||||
|
||||
if mouse_number == "own":
|
||||
mouse_number_show = "自前"
|
||||
else:
|
||||
mouse_number_show = mouse_number
|
||||
|
||||
reason_input_form = ReasonModal(title="Dislocker | 登録", pc_number=str(pc_number), keyboard_number=str(keyboard_number), mouse_number=str(mouse_number))
|
||||
await interaction.response.send_modal(reason_input_form)
|
||||
|
||||
elif custom_id_split[0] == "stop":
|
||||
pc_stop = dislocker.stop(discord_user_id=interaction.user.id)
|
||||
stop_view = discord.ui.View(timeout=15)
|
||||
if pc_stop["about"] == "unused":
|
||||
await interaction.response.send_message("# :shaking_face: 使用されていないようです...", ephemeral=True)
|
||||
elif pc_stop["about"] == "user_data_not_found":
|
||||
await interaction.response.send_message("# :dizzy_face: ユーザーとして登録されていないようです。\n最初にサーバーで登録を行ってください。", ephemeral=True)
|
||||
elif pc_stop["about"] == "ok":
|
||||
await interaction.response.send_message(f":white_check_mark: PC番号 {pc_stop["output_dict"]["pc_number"]} の使用が終了されました。", ephemeral=True)
|
||||
await client.get_channel(dislocker.server_config["bot"]["log_channel_id"]).send(f':negative_squared_cross_mark: {pc_stop["output_dict"]["name"]} さんがPC {pc_stop["output_dict"]["pc_number"]} の使用を終了しました。')
|
||||
else:
|
||||
await interaction.response.send_message("# :skull_crossbones: 停止できませんでした。\n内部エラーが発生しています。", ephemeral=True)
|
||||
|
||||
elif custom_id_split[0] == "user" and custom_id_split[1] == "register":
|
||||
user_register = dislocker.user_register(name=interaction.user.display_name, discord_user_name=interaction.user.name, discord_user_id=interaction.user.id)
|
||||
if user_register["about"] == "ok":
|
||||
await interaction.response.send_message(f"# :white_check_mark: ユーザー情報が登録されました。\n>>> ユーザー名:{interaction.user.display_name}", ephemeral=True)
|
||||
elif user_register["about"] == "already_exists":
|
||||
await interaction.response.send_message("# :no_entry: 登録できませんでした。\nもう登録されている可能性があります。", ephemeral=True)
|
||||
else:
|
||||
await interaction.response.send_message("# :no_entry: 登録できませんでした。\n内部エラーが発生しています。", ephemeral=True)
|
||||
|
||||
|
||||
#使用者側のスラッシュコマンド
|
||||
@tree.command(name="use", description="パソコンの使用登録をします。通常はこのコマンドを使用する必要はありません。")
|
||||
async def use(interaction: discord.Interaction, pc_number: int, keyboard_number: int, mouse_number: int, detail: str):
|
||||
|
@ -812,6 +1021,28 @@ async def report(interaction: discord.Interaction):
|
|||
if report_export["about"] == "error":
|
||||
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
|
||||
|
||||
@tree.command(name="init", description="操作チャンネルにボタン一式を送信します。")
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
|
||||
client.run(dislocker.server_config["bot"]["token"])
|
Loading…
Reference in a new issue