From cad3f5ae724d63653f6003ce05032088b2272737 Mon Sep 17 00:00:00 2001 From: Pythonic-Rainbow Date: Sat, 20 Jan 2024 08:28:22 +0000 Subject: [PATCH] [Bot] Add admin command --- Bot/Bot.csproj | 11 ++++++++++- Bot/Dc/CmdHandlers.cs | 36 ----------------------------------- Bot/Dc/Commands.cs | 43 ++++++++++++++++++++++++++++++++++++++++++ Bot/Dc/Discord.cs | 14 ++++++++++++-- Bot/SQLite-net.dll | Bin 0 -> 116224 bytes Bot/Sql/BotAdmin.cs | 13 +++++++++++++ Bot/Sql/Db.cs | 13 +++++++++++-- 7 files changed, 89 insertions(+), 41 deletions(-) delete mode 100644 Bot/Dc/CmdHandlers.cs create mode 100644 Bot/Dc/Commands.cs create mode 100644 Bot/SQLite-net.dll create mode 100644 Bot/Sql/BotAdmin.cs diff --git a/Bot/Bot.csproj b/Bot/Bot.csproj index dec485a..047ce9b 100644 --- a/Bot/Bot.csproj +++ b/Bot/Bot.csproj @@ -29,12 +29,21 @@ - + + + + + + SQLite-net.dll + PreserveNewest + + PreserveNewest + diff --git a/Bot/Dc/CmdHandlers.cs b/Bot/Dc/CmdHandlers.cs deleted file mode 100644 index dcf2c11..0000000 --- a/Bot/Dc/CmdHandlers.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Discord.Interactions; -using Discord.WebSocket; -using Hyperstellar.Sql; - -namespace Hyperstellar.Dc; - -public class CmdHandlers : InteractionModuleBase -{ - - [SlashCommand("shutdown", "[Admin] Shuts down the bot")] - public async Task ShutdownAsync(bool commit = true) - { - if (Context.User.Id != 264756129916125184) - { - return; - } - await RespondAsync("Ok", ephemeral: true); - if (commit) - { - Db.Commit(); - } - Environment.Exit(0); - } - - [SlashCommand("commit", "[Admin] Commits db")] - public async Task CommitAsync() - { - if (Context.User.Id != 264756129916125184) - { - return; - } - - Db.Commit(); - await RespondAsync("Committed", ephemeral: true); - } -} diff --git a/Bot/Dc/Commands.cs b/Bot/Dc/Commands.cs new file mode 100644 index 0000000..0779656 --- /dev/null +++ b/Bot/Dc/Commands.cs @@ -0,0 +1,43 @@ +using Discord.Interactions; +using Discord.WebSocket; +using Hyperstellar.Sql; + +namespace Hyperstellar.Dc; + +public class Commands : InteractionModuleBase +{ + [RequireOwner] + [SlashCommand("shutdown", "Shuts down the bot")] + public async Task ShutdownAsync(bool commit = true) + { + await RespondAsync("Ok", ephemeral: true); + if (commit) + { + Db.Commit(); + } + Environment.Exit(0); + } + + [RequireOwner] + [SlashCommand("commit", "Commits db")] + public async Task CommitAsync() + { + Db.Commit(); + await RespondAsync("Committed", ephemeral: true); + } + + [RequireOwner] + [SlashCommand("admin", "Makes the Discord user an admin")] + public async Task AdminAsync(SocketGuildUser user) + { + bool success = Db.AddAdmin(user.Id); + if (success) + { + await RespondAsync("Success!", ephemeral: true); + } + else + { + await RespondAsync("Error", ephemeral: true); + } + } +} diff --git a/Bot/Dc/Discord.cs b/Bot/Dc/Discord.cs index 97597d4..ddc4b39 100644 --- a/Bot/Dc/Discord.cs +++ b/Bot/Dc/Discord.cs @@ -22,10 +22,19 @@ private static Task Log(LogMessage msg) return Task.CompletedTask; } - private static async Task Ready() + private static Task Ready() { s_botLog = (SocketTextChannel)s_bot.GetChannel(Secrets.s_botLogId); - _ = Task.Run(BotReadyAsync); + Task.Run(BotReadyAsync); + + SlashCommandBuilder cmd = new SlashCommandBuilder().WithName("admin").WithDescription("Makes the Discord user an admin"); + cmd.AddOption("user", ApplicationCommandOptionType.User, "the user", isRequired: true); + Task.Run(() => + { + s_bot.CreateGlobalApplicationCommandAsync(cmd.Build()); + Console.WriteLine("Registered command"); + }); + return Task.CompletedTask; } private static async Task SlashCmdXAsync(SocketSlashCommand cmd) @@ -39,6 +48,7 @@ internal static async Task InitAsync() s_bot.Log += Log; s_bot.Ready += Ready; s_bot.SlashCommandExecuted += SlashCmdXAsync; + await s_interactionSvc.AddModulesAsync(Assembly.GetEntryAssembly(), null); await s_bot.LoginAsync(TokenType.Bot, Secrets.s_discord); await s_bot.StartAsync(); diff --git a/Bot/SQLite-net.dll b/Bot/SQLite-net.dll new file mode 100644 index 0000000000000000000000000000000000000000..11c718f8e3487a96e43085f64e447e78e2343be0 GIT binary patch literal 116224 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 L`hVd6BOLfodMQ9P literal 0 HcmV?d00001 diff --git a/Bot/Sql/BotAdmin.cs b/Bot/Sql/BotAdmin.cs new file mode 100644 index 0000000..d74d9cd --- /dev/null +++ b/Bot/Sql/BotAdmin.cs @@ -0,0 +1,13 @@ +using SQLite; + +namespace Hyperstellar.Sql; + +internal sealed class BotAdmin +{ + [PrimaryKey, NotNull] + public ulong Id { get; set; } + + public BotAdmin() => Id = 0; + + public BotAdmin(ulong id) => Id = id; +} diff --git a/Bot/Sql/Db.cs b/Bot/Sql/Db.cs index 59e4438..620ba77 100644 --- a/Bot/Sql/Db.cs +++ b/Bot/Sql/Db.cs @@ -5,6 +5,7 @@ namespace Hyperstellar.Sql; internal sealed class Db { internal static readonly SQLiteConnection s_db = new("Hyperstellar.db"); + internal static readonly HashSet s_admins = s_db.Table().Select(a => a.Id).ToHashSet(); internal static void Commit() { @@ -27,13 +28,21 @@ internal static bool RemoveMembers(string[] members) return count == members.Length; } + internal static bool AddAdmin(ulong id) + { + var admin = new BotAdmin(id); + int count = s_db.Insert(admin); + s_admins.Add(id); + return count == 1; + } + internal static async Task InitAsync() { + s_db.BeginTransaction(); while (true) { - s_db.BeginTransaction(); await Task.Delay(5 * 60 * 1000); - s_db.Commit(); + Commit(); } } }