スラッシュコマンドを追加

This commit is contained in:
suti7yk5032 2024-09-26 08:42:54 +09:00
parent 5578cffad6
commit 4f78a54b2f

View file

@ -640,6 +640,64 @@ class DL():
finally:
if cursor:
cursor.close()
def pc_onetime_gen(self):
try:
if os.path.isfile(dislocker.onetime_config_path):
with open(dislocker.onetime_config_path, "r") as r:
onetime_config = json.load(r)
onetime = onetime_config["onetime"]["pc_register"]
if onetime == None:
onetime = str(self.password_generate(8))
onetime_config["onetime"]["pc_register"] = onetime
with open(dislocker.onetime_config_path, "w") as w:
json.dump(onetime_config, w, indent=4)
return {"result": 0, "about": "ok", "onetime": onetime}
else:
return {"result": 0, "already_exists": "ok", "onetime": onetime}
else:
onetime = str(self.password_generate(8))
onetime_config = {
"onetime": {
"pc_register": onetime,
"device_register": None
}
}
with open(dislocker.onetime_config_path, "w") as w:
json.dump(onetime_config, w, indent=4)
return {"result": 0, "about": "ok", "onetime": onetime}
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"}
def device_onetime_gen(self):
try:
if os.path.isfile(dislocker.onetime_config_path):
with open(dislocker.onetime_config_path, "r") as r:
onetime_config = json.load(r)
onetime = onetime_config["onetime"]["device_register"]
if onetime == None:
onetime = str(self.password_generate(8))
onetime_config["onetime"]["device_register"] = onetime
with open(dislocker.onetime_config_path, "w") as w:
json.dump(onetime_config, w, indent=4)
return {"result": 0, "about": "ok", "onetime": onetime}
else:
return {"result": 0, "already_exists": "ok", "onetime": onetime}
else:
onetime = str(self.password_generate(8))
onetime_config = {
"onetime": {
"pc_register": None,
"device_register": onetime
}
}
with open(dislocker.onetime_config_path, "w") as w:
json.dump(onetime_config, w, indent=4)
return {"result": 0, "about": "ok", "onetime": onetime}
except Exception as error:
self.log(title=f"[ERROR] デバイス登録用のワンタイムパスワードを発行中にエラーが発生しました。 {str(error.__class__.__name__)}", message=str(error.args), flag=1)
return {"result": 1, "about": "error"}
dislocker = DL()
@ -658,6 +716,7 @@ async def on_ready():
print("------")
await tree.sync()
#使用者側のスラッシュコマンド
@tree.command(name="use", description="パソコンの使用登録をします。通常はこのコマンドを使用する必要はありません。")
async def use(interaction: discord.Interaction, pc_number: int, keyboard_number: int, mouse_number: int, detail: str):
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=detail)
@ -694,5 +753,63 @@ async def stop(interaction: discord.Interaction):
elif stop["about"] == "error":
await interaction.response.send_message("# :skull_crossbones: 停止できませんでした。\n内部エラーが発生しています。", ephemeral=True)
#管理者側のスラッシュコマンド
@tree.command(name="userreg", description="ユーザーを登録します。")
async def userreg(interaction: discord.Interaction, discord_user_id: str, discord_user_name: str, name: str):
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)
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)
elif user_register["about"] == "error":
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
@tree.command(name="pcreg", description="PCを登録するためのワンタイムパスワードを発行します。")
async def pcreg(interaction: discord.Interaction):
onetime = dislocker.pc_onetime_gen()
if onetime["result"] == 0:
await interaction.response.send_message(f":white_check_mark: PC登録用のワンタイムパスワードを発行しました。\n>>> # ワンタイムパスワード | {onetime['onetime']}\n## 有効期限 | 1回の登録でのみ使用可能です。", ephemeral=True)
dislocker.log(title=f"[INFO] PC登録用のワンタイムパスワードを発行しました。", message=f"ワンタイムパスワード | {onetime['onetime']}", flag=0)
elif onetime["result"] == 1:
if onetime["about"] == "error":
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
@tree.command(name="devicereg", description="デバイスを登録するためのワンタイムパスワードを発行します。")
async def devicereg(interaction: discord.Interaction):
onetime = dislocker.device_onetime_gen()
if onetime["result"] == 0:
await interaction.response.send_message(f":white_check_mark: デバイス登録用のワンタイムパスワードを発行しました。\n>>> # ワンタイムパスワード | {onetime['onetime']}\n## 有効期限 | 1回の登録でのみ使用可能です。", ephemeral=True)
dislocker.log(title=f"[INFO] デバイス登録用のワンタイムパスワードを発行しました。", message=f"ワンタイムパスワード | {onetime['onetime']}", flag=0)
elif onetime["result"] == 1:
if onetime["about"] == "error":
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
@tree.command(name="fstop", description="PCの使用を強制終了します。")
async def fstop(interaction: discord.Interaction, pc_number: int, bot_about: str):
force_stop = dislocker.force_stop(pc_number=pc_number, bot_about=bot_about)
if force_stop["result"] == 0:
await interaction.response.send_message(f":white_check_mark: PC {pc_number} の使用を強制終了しました。", ephemeral=True)
dislocker.log(title=f"[INFO] PC {pc_number} の使用を強制終了しました。", message=f"理由 | {bot_about}", flag=0)
elif force_stop["result"] == 1:
if force_stop["about"] == "not_used":
await interaction.response.send_message(":x: そのPCは使用されていません。", ephemeral=True)
elif force_stop["about"] == "bot_about_not_found":
await interaction.response.send_message(":x: 理由が指定されていません。", ephemeral=True)
elif force_stop["about"] == "error":
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
@tree.command(name="report", description="PCの使用履歴をエクスポートします。")
async def report(interaction: discord.Interaction):
report_export = dislocker.report_export()
if report_export["result"] == 0:
await interaction.response.send_message(f":white_check_mark: 使用履歴のレポートです。", file=discord.File(report_export["file_path"]), ephemeral=True)
dislocker.log(title=f"[INFO] PCの使用履歴をエクスポートしました。", message=f"ファイルパス | {report_export['file_path']}", flag=0)
elif report_export["result"] == 1:
if report_export["about"] == "error":
await interaction.response.send_message(":x: 内部エラーが発生しました。\nサーバーでエラーが発生しています。管理者に問い合わせてください。", ephemeral=True)
client.run(dislocker.server_config["bot"]["token"])