59 lines
2.2 KiB
C#
59 lines
2.2 KiB
C#
using DSharpPlus;
|
|
using DSharpPlus.EventArgs;
|
|
using Microsoft.Data.Sqlite;
|
|
using System.Threading.Tasks;
|
|
using System;
|
|
|
|
namespace T3k3rg0
|
|
{
|
|
public static class ReactionRoleHandler
|
|
{
|
|
public static void Register(DiscordClient discord)
|
|
{
|
|
discord.MessageReactionAdded += OnReactionAdded;
|
|
discord.MessageReactionRemoved += OnReactionRemoved;
|
|
}
|
|
|
|
private static async Task OnReactionAdded(DiscordClient client, MessageReactionAddEventArgs e)
|
|
{
|
|
if (e.User.IsBot) return;
|
|
|
|
var dbPath = Environment.GetEnvironmentVariable("DB_ROLES_LOC");
|
|
using var connection = new SqliteConnection($"Data Source={dbPath}");
|
|
connection.Open();
|
|
|
|
var command = connection.CreateCommand();
|
|
command.CommandText = @"SELECT role_id FROM reaction_roles WHERE message_id = $message_id AND emoji = $emoji";
|
|
command.Parameters.AddWithValue("$message_id", e.Message.Id);
|
|
command.Parameters.AddWithValue("$emoji", e.Emoji.ToString());
|
|
|
|
var roleId = (long?)command.ExecuteScalar();
|
|
if (roleId == null) return;
|
|
|
|
var member = await e.Guild.GetMemberAsync(e.User.Id);
|
|
var role = e.Guild.GetRole((ulong)roleId);
|
|
await member.GrantRoleAsync(role);
|
|
}
|
|
|
|
private static async Task OnReactionRemoved(DiscordClient client, MessageReactionRemoveEventArgs e)
|
|
{
|
|
if (e.User.IsBot) return;
|
|
|
|
var dbPath = Environment.GetEnvironmentVariable("DB_ROLES_LOC");
|
|
using var connection = new SqliteConnection($"Data Source={dbPath}");
|
|
connection.Open();
|
|
|
|
var command = connection.CreateCommand();
|
|
command.CommandText = @"SELECT role_id FROM reaction_roles WHERE message_id = $message_id AND emoji = $emoji";
|
|
command.Parameters.AddWithValue("$message_id", e.Message.Id);
|
|
command.Parameters.AddWithValue("$emoji", e.Emoji.ToString());
|
|
|
|
var roleId = (long?)command.ExecuteScalar();
|
|
if (roleId == null) return;
|
|
|
|
var member = await e.Guild.GetMemberAsync(e.User.Id);
|
|
var role = e.Guild.GetRole((ulong)roleId);
|
|
await member.RevokeRoleAsync(role);
|
|
}
|
|
}
|
|
}
|