t3k-dc-bot-cs/events/reaction-roles.cs
2025-04-26 20:05:22 +02:00

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);
}
}
}