added reactionrole manager

This commit is contained in:
balos 2025-05-03 18:06:09 +02:00
parent 8274a22f1b
commit 1695770f9f
4 changed files with 133 additions and 1 deletions

View file

@ -27,7 +27,6 @@ namespace T3k3rg0.Commands
var emoji = await EmojiExtractor.ExtractAsync(emojiInput, ctx.Client); var emoji = await EmojiExtractor.ExtractAsync(emojiInput, ctx.Client);
if (emoji == null) if (emoji == null)
{ {
await ctx.RespondAsync("Nem sikerült felismerni az emojit.");
return; return;
} }
await message.CreateReactionAsync(emoji); await message.CreateReactionAsync(emoji);

View file

@ -0,0 +1,67 @@
using DSharpPlus.CommandsNext;
using DSharpPlus.CommandsNext.Attributes;
using DSharpPlus.Entities;
using System.Threading.Tasks;
using T3k3rg0.Helpers;
namespace T3k3rg0.Commands
{
public class ReactionRoleManager : BaseCommandModule
{
[Command("addreactionrole")]
[Description("Hozzáad egy új reaction role-t ! reactionrole <csatorna> <üzenet> <emoji> <@szerep>")]
[HasAdminRole]
public async Task AddReactionRole(CommandContext ctx, string channelInput, string messageInput, string emojiInput, DiscordRole role)
{
var channel = await IdExtractor.ExtractChannelId(channelInput, ctx.Client);
if (channel == null)
return;
var message = await IdExtractor.ExtractMessageId(messageInput, channel);
if (message == null)
return;
var emoji = await EmojiExtractor.ExtractAsync(emojiInput, ctx.Client);
if (emoji == null)
return;
bool inserted = ReactionRoleStorage.TryAddReactionRole(message.Id, emoji.ToString(), role.Id);
if (!inserted)
return;
await message.CreateReactionAsync(emoji);
}
[Command("removereactionrole")]
[Description("Eltávolít egy meglévő reaction role-t ! removereactionrole <csatorna> <üzenet> <emoji>")]
[HasAdminRole]
public async Task RemoveReactionRole(CommandContext ctx, string channelInput, string messageInput, string emojiInput)
{
var channel = await IdExtractor.ExtractChannelId(channelInput, ctx.Client);
if (channel == null)
{
return;
}
var message = await IdExtractor.ExtractMessageId(messageInput, channel);
if (message == null)
{
return;
}
var emoji = await EmojiExtractor.ExtractAsync(emojiInput, ctx.Client);
if (emoji == null)
{
return;
}
bool removed = ReactionRoleStorage.TryRemoveReactionRole(message.Id, emoji.ToString());
if (!removed)
{
return;
}
await message.DeleteOwnReactionAsync(emoji);
}
}
}

View file

@ -0,0 +1,65 @@
using Microsoft.Data.Sqlite;
using System;
namespace T3k3rg0.Helpers
{
public static class ReactionRoleStorage
{
private static readonly string DbPath = Environment.GetEnvironmentVariable("DB_ROLES_LOC");
public static ulong? GetRoleId(ulong messageId, string emojiRaw)
{
using var conn = new SqliteConnection($"Data Source={DbPath}");
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = @"
SELECT role_id FROM reaction_roles
WHERE message_id = @msg AND emoji = @emoji";
cmd.Parameters.AddWithValue("@msg", (long)messageId);
cmd.Parameters.AddWithValue("@emoji", emojiRaw);
using var reader = cmd.ExecuteReader();
if (reader.Read())
{
return (ulong)(long)reader["role_id"];
}
return null;
}
public static bool TryAddReactionRole(ulong messageId, string emojiRaw, ulong roleId)
{
using var conn = new SqliteConnection($"Data Source={DbPath}");
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = @"
INSERT OR IGNORE INTO reaction_roles (message_id, emoji, role_id)
VALUES (@msg, @emoji, @role)";
cmd.Parameters.AddWithValue("@msg", (long)messageId);
cmd.Parameters.AddWithValue("@emoji", emojiRaw);
cmd.Parameters.AddWithValue("@role", (long)roleId);
int rowsAffected = cmd.ExecuteNonQuery();
return rowsAffected > 0;
}
public static bool TryRemoveReactionRole(ulong messageId, string emojiRaw)
{
using var conn = new SqliteConnection($"Data Source={DbPath}");
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = @"
DELETE FROM reaction_roles
WHERE message_id = @msg AND emoji = @emoji";
cmd.Parameters.AddWithValue("@msg", (long)messageId);
cmd.Parameters.AddWithValue("@emoji", emojiRaw);
int rowsAffected = cmd.ExecuteNonQuery();
return rowsAffected > 0;
}
}
}

View file

@ -33,6 +33,7 @@ namespace T3k3rg0
commands.RegisterCommands<T3k3rg0.Commands.Hello>(); commands.RegisterCommands<T3k3rg0.Commands.Hello>();
commands.RegisterCommands<T3k3rg0.Commands.Send>(); commands.RegisterCommands<T3k3rg0.Commands.Send>();
commands.RegisterCommands<T3k3rg0.Commands.React>(); commands.RegisterCommands<T3k3rg0.Commands.React>();
commands.RegisterCommands<T3k3rg0.Commands.ReactionRoleManager>();
ReactionRoleHandler.Register(discord); ReactionRoleHandler.Register(discord);
await discord.ConnectAsync(); await discord.ConnectAsync();