mirror of
https://gitlab.com/Deukhoofd/DeukBot4.git
synced 2026-04-03 11:10:05 +00:00
Work on permission system, along with initial work on database(postgres) system
This commit is contained in:
28
DeukBot4/Database/DatabaseConnection.cs
Normal file
28
DeukBot4/Database/DatabaseConnection.cs
Normal file
@@ -0,0 +1,28 @@
|
||||
using System;
|
||||
using DeukBot4.MessageHandlers.Permissions;
|
||||
using Npgsql;
|
||||
|
||||
namespace DeukBot4.Database
|
||||
{
|
||||
public class DatabaseConnection : IDisposable
|
||||
{
|
||||
public static string ConnectionString { private get; set; }
|
||||
private readonly NpgsqlConnection _connection;
|
||||
|
||||
public DatabaseConnection()
|
||||
{
|
||||
_connection = new NpgsqlConnection(ConnectionString);
|
||||
_connection.Open();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_connection.Dispose();
|
||||
}
|
||||
|
||||
public static implicit operator NpgsqlConnection(DatabaseConnection conn)
|
||||
{
|
||||
return conn._connection;
|
||||
}
|
||||
}
|
||||
}
|
||||
25
DeukBot4/Database/DatabaseInitializer.cs
Normal file
25
DeukBot4/Database/DatabaseInitializer.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using Npgsql;
|
||||
|
||||
namespace DeukBot4.Database
|
||||
{
|
||||
public static class DatabaseInitializer
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
using (var conn = new DatabaseConnection())
|
||||
{
|
||||
using (var cmd = new NpgsqlCommand())
|
||||
{
|
||||
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)" +
|
||||
")";
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
51
DeukBot4/Database/DatabaseRolePermissions.cs
Normal file
51
DeukBot4/Database/DatabaseRolePermissions.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System.Threading.Tasks;
|
||||
using DeukBot4.MessageHandlers.Permissions;
|
||||
using DeukBot4.Utilities;
|
||||
using Npgsql;
|
||||
|
||||
namespace DeukBot4.Database
|
||||
{
|
||||
public static class DatabaseRolePermissions
|
||||
{
|
||||
public static async Task SetRolePermission(ulong serverId, ulong roleId, PermissionLevel permissionLevel)
|
||||
{
|
||||
using (var conn = new DatabaseConnection())
|
||||
{
|
||||
using (var cmd = new NpgsqlCommand())
|
||||
{
|
||||
cmd.Connection = conn;
|
||||
cmd.CommandText = "INSERT INTO permission_roles (server_id, role_id, permission_level)" +
|
||||
"VALUES (@server_id, @role_id, @permission_level) " +
|
||||
"ON CONFLICT (server_id, role_id) DO UPDATE SET permission_level = @permission_level";
|
||||
cmd.Parameters.AddWithValue("server_id", serverId.ToLong());
|
||||
cmd.Parameters.AddWithValue("role_id", roleId.ToLong());
|
||||
cmd.Parameters.AddWithValue("permission_level", (sbyte)permissionLevel);
|
||||
await cmd.ExecuteNonQueryAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<PermissionLevel> GetRolePermission(ulong serverId, ulong roleId)
|
||||
{
|
||||
using (var conn = new DatabaseConnection())
|
||||
{
|
||||
using (var cmd = new NpgsqlCommand())
|
||||
{
|
||||
cmd.Connection = conn;
|
||||
cmd.CommandText =
|
||||
"SELECT permission_level FROM permission_roles WHERE server_id = @server_id AND role_id = @role_id";
|
||||
cmd.Parameters.AddWithValue("server_id", serverId.ToLong());
|
||||
cmd.Parameters.AddWithValue("role_id", roleId.ToLong());
|
||||
|
||||
var reader = cmd.ExecuteReader();
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
return (PermissionLevel)(sbyte)reader.GetInt16(0);
|
||||
}
|
||||
|
||||
return (PermissionLevel)sbyte.MinValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user