From b3c878db04aecff59eabba8b53230594514d66be Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Fri, 30 Mar 2018 20:10:24 +0200 Subject: [PATCH] Initial work on system for server settings --- DeukBot4/Database/DatabaseInitializer.cs | 14 +++-- .../Database/ServerSettings/ServerSetting.cs | 32 ++++++++++ .../ServerSettings/ServerSettingHandler.cs | 58 +++++++++++++++++++ 3 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 DeukBot4/Database/ServerSettings/ServerSetting.cs create mode 100644 DeukBot4/Database/ServerSettings/ServerSettingHandler.cs diff --git a/DeukBot4/Database/DatabaseInitializer.cs b/DeukBot4/Database/DatabaseInitializer.cs index e50bafe..546fb1b 100644 --- a/DeukBot4/Database/DatabaseInitializer.cs +++ b/DeukBot4/Database/DatabaseInitializer.cs @@ -12,10 +12,16 @@ namespace DeukBot4.Database { cmd.Connection = conn; cmd.CommandText = "CREATE TABLE IF NOT EXISTS permission_roles (" + - "server_id bigint NOT NULL," + - "role_id bigint NOT NULL," + - "permission_level smallint NOT NULL," + - "PRIMARY KEY(server_id, role_id)" + + "server_id bigint NOT NULL," + + "role_id bigint NOT NULL," + + "permission_level smallint NOT NULL," + + "PRIMARY KEY(server_id, role_id)" + + ")"; + cmd.ExecuteNonQuery(); + cmd.CommandText = "CREATE TABLE IF NOT EXISTS server_settings (" + + "server_id bigint NOT NULL," + + "muted_role bigint NOT NULL," + + "PRIMARY KEY(server_id)" + ")"; cmd.ExecuteNonQuery(); } diff --git a/DeukBot4/Database/ServerSettings/ServerSetting.cs b/DeukBot4/Database/ServerSettings/ServerSetting.cs new file mode 100644 index 0000000..738c1ae --- /dev/null +++ b/DeukBot4/Database/ServerSettings/ServerSetting.cs @@ -0,0 +1,32 @@ +using DeukBot4.Utilities; +using Npgsql; + +namespace DeukBot4.Database.ServerSettings +{ + public class ServerSetting + { + public ServerSetting(ulong serverId, ulong mutedRoleId = 0) + { + ServerId = serverId; + MutedRoleId = mutedRoleId; + } + + public ulong ServerId { get; } + public ulong MutedRoleId { get; } + + public void SetMutedRoleId(ulong id) + { + using (var conn = new DatabaseConnection()) + { + using (var cmd = new NpgsqlCommand()) + { + cmd.Connection = conn; + cmd.CommandText = "UPDATE server_settings SET muted_role = @val WHERE server_id = @key"; + cmd.Parameters.AddWithValue("val", id.ToLong()); + cmd.Parameters.AddWithValue("key", ServerId.ToLong()); + cmd.ExecuteNonQuery(); + } + } + } + } +} \ No newline at end of file diff --git a/DeukBot4/Database/ServerSettings/ServerSettingHandler.cs b/DeukBot4/Database/ServerSettings/ServerSettingHandler.cs new file mode 100644 index 0000000..dff2eb4 --- /dev/null +++ b/DeukBot4/Database/ServerSettings/ServerSettingHandler.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using DeukBot4.Utilities; +using Discord; +using Npgsql; + +namespace DeukBot4.Database.ServerSettings +{ + public static class ServerSettingHandler + { + private static readonly Dictionary Settings = new Dictionary(); + + public static void OnBotStartUp() + { + using (var conn = new DatabaseConnection()) + { + using (var cmd = new NpgsqlCommand()) + { + cmd.Connection = conn; + cmd.CommandText = "SELECT server_id muted_role FROM server_settings"; + var reader = cmd.ExecuteReader(); + while (reader.Read()) + { + var id = reader.GetInt64(0).ToUlong(); + var mutedRole = reader.GetInt64(1).ToUlong(); + Settings.Add(id, new ServerSetting(id, mutedRole)); + } + } + } + } + + private static void AddSettingsToDatabase(ServerSetting setting) + { + using (var conn = new DatabaseConnection()) + { + using (var cmd = new NpgsqlCommand()) + { + cmd.Connection = conn; + cmd.CommandText = "INSERT INTO server_settings (server_id, muted_role) VALUES (@id, @muted)"; + cmd.Parameters.AddWithValue("id", setting.ServerId.ToLong()); + cmd.Parameters.AddWithValue("muted", setting.MutedRoleId.ToLong()); + cmd.ExecuteNonQuery(); + } + } + } + + public static ServerSetting GetSettings(ulong id) + { + if (Settings.TryGetValue(id, out var setting)) + { + return setting; + } + setting = new ServerSetting(id); + Settings.Add(id, setting); + AddSettingsToDatabase(setting); + return setting; + } + } +} \ No newline at end of file