diff --git a/bot.csproj b/bot.csproj
index e69c23d..8c94810 100644
--- a/bot.csproj
+++ b/bot.csproj
@@ -12,12 +12,6 @@
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
diff --git a/commands/napiszar.cs b/commands/napiszar.cs
deleted file mode 100644
index 0447649..0000000
--- a/commands/napiszar.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using DSharpPlus.CommandsNext;
-using DSharpPlus.CommandsNext.Attributes;
-using System.Threading.Tasks;
-using T3k3rg0.Helpers;
-
-namespace T3k3rg0.Commands
-{
- public class Napiszar : BaseCommandModule
- {
- [Command("napiszar")]
- [Description("Elküld egy napiszart.")]
- public async Task GetNapiszar(CommandContext ctx)
- {
- if (NapiszarService.HasUsedToday(ctx.User.Id))
- {
- await ctx.RespondAsync("Ma már megkaptad a szarodat");
- return;
- }
-
- string napiszar = NapiszarService.GetRandomSzar();
- NapiszarService.LogUsage(ctx.User.Id);
- await ctx.RespondAsync(napiszar);
- }
- }
-}
diff --git a/commands/reactionrolemanager.cs b/commands/reactionrolemanager.cs
index 8058f20..06feab1 100644
--- a/commands/reactionrolemanager.cs
+++ b/commands/reactionrolemanager.cs
@@ -2,7 +2,6 @@ using DSharpPlus.CommandsNext;
using DSharpPlus.CommandsNext.Attributes;
using DSharpPlus.Entities;
using System.Threading.Tasks;
-using System.Text;
using T3k3rg0.Helpers;
namespace T3k3rg0.Commands
@@ -12,66 +11,56 @@ namespace T3k3rg0.Commands
[Command("addreactionrole")]
[Description("Hozzáad egy új reaction role-t ! reactionrole <üzenet> <@szerep>")]
[HasAdminRole]
- public async Task AddReactionRole(CommandContext ctx, string messageLink, DiscordEmoji emoji, DiscordRole role)
+ public async Task AddReactionRole(CommandContext ctx, string channelInput, string messageInput, string emojiInput, DiscordRole role)
{
- var channel = await IdExtractor.ExtractChannelId(messageLink, ctx.Client);
- if (channel is null)
- {
+ var channel = await IdExtractor.ExtractChannelId(channelInput, ctx.Client);
+ if (channel == null)
return;
- }
- var message = await IdExtractor.ExtractMessageId(messageLink, channel);
- if (message is null)
- {
+ 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;
- }
- ReactionRoleService.AddReactionRole(message.Id, emoji.ToString(), role.Id);
await message.CreateReactionAsync(emoji);
}
-
[Command("removereactionrole")]
- [Description("Eltávolít egy meglévő reaction role-t ! removereactionrole ")]
+ [Description("Eltávolít egy meglévő reaction role-t ! removereactionrole <üzenet> ")]
[HasAdminRole]
- public async Task RemoveReactionRole(CommandContext ctx, int id)
+ public async Task RemoveReactionRole(CommandContext ctx, string channelInput, string messageInput, string emojiInput)
{
- var result = await ReactionRoleService.RemoveReactionRoleByIdAsync(id);
-
- if (!result.Success)
+ var channel = await IdExtractor.ExtractChannelId(channelInput, ctx.Client);
+ if (channel == null)
{
- await ctx.RespondAsync(result.Message ?? "❌ Ismeretlen hiba történt.");
return;
}
- await ctx.RespondAsync(result.Message ?? $"✅ A(z) {id}. reakció szerepkör törölve.");
- }
- [Command("listreactionrole")]
- [Description("Felsorolja a reaction role párosításokat.")]
- [HasAdminRole]
- public async Task ListReactionRoles(CommandContext ctx)
- {
- // Lekérjük az összes reakció alapú szerepkört az adatbázisból
- var allRoles = ReactionRoleService.GetAllReactionRoles();
-
- if (allRoles.Count == 0)
+ var message = await IdExtractor.ExtractMessageId(messageInput, channel);
+ if (message == null)
{
- await ctx.RespondAsync("❌ Nincs reakció alapú szerepkör a szerveren.");
return;
}
- var sb = new StringBuilder();
- sb.AppendLine("📜 Reakció alapú szerepkörök:");
-
- // Az összes szerepkör kiírása sorszámozva
- int index = 1;
- foreach (var role in allRoles)
+ var emoji = await EmojiExtractor.ExtractAsync(emojiInput, ctx.Client);
+ if (emoji == null)
{
- var roleObj = ctx.Guild.GetRole(role.RoleId); // Az adott szerepkör lekérése
- sb.AppendLine($"{index}. Üzenet ID: {role.MessageId}, Emoji: {role.Emoji}, Szerepkör: {roleObj?.Name ?? "Nincs név"}");
- index++; // Növeljük a sorszámot
+ return;
}
- await ctx.RespondAsync(sb.ToString());
+ bool removed = ReactionRoleStorage.TryRemoveReactionRole(message.Id, emoji.ToString());
+ if (!removed)
+ {
+ return;
+ }
+
+ await message.DeleteOwnReactionAsync(emoji);
}
}
}
diff --git a/helpers/dbcontext.cs b/helpers/dbcontext.cs
deleted file mode 100644
index 14555cf..0000000
--- a/helpers/dbcontext.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using System;
-using Microsoft.EntityFrameworkCore;
-using T3k3rg0.Helpers.Models;
-
-namespace T3k3rg0.Helpers.Data
-{
- public static class DbPaths
- {
- public static readonly string napiszarDbPath = Environment.GetEnvironmentVariable("DB_NAPISZAR_LOC");
- public static readonly string rolesDbPath = Environment.GetEnvironmentVariable("DB_ROLES_LOC");
- }
-
- public class NapiszarDbContext : DbContext
- {
- public DbSet Joslatok { get; set; }
- public DbSet DailyUsages { get; set; }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlite($"Data Source={DbPaths.napiszarDbPath}");
- }
- }
-
- public class RolesDbContext : DbContext
- {
- public DbSet ReactionRoles { get; set; }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- modelBuilder.Entity()
- .HasKey(r => new { r.MessageId, r.Emoji });
- }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlite($"Data Source={DbPaths.rolesDbPath}");
- }
- }
-}
-
diff --git a/helpers/dbmodels.cs b/helpers/dbmodels.cs
deleted file mode 100644
index 95bc98f..0000000
--- a/helpers/dbmodels.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.ComponentModel.DataAnnotations;
-using System.ComponentModel.DataAnnotations.Schema;
-
-namespace T3k3rg0.Helpers.Models
-{
- [Table("joslatok")]
- public class Joslat
- {
- [Key]
- [Column("id")]
- public int Id { get; set; }
-
- [Column("szoveg")]
- public string Szoveg { get; set; }
- }
-
- [Table("daily_usage")]
- public class DailyUsage
- {
- [Key]
- [Column("user_id")]
- public long UserId { get; set; }
-
- [Column("last_used")]
- public DateTime LastUsed { get; set; }
- }
-
- [Table("reaction_roles")]
- public class ReactionRole
- {
- [Key, Column("message_id", Order = 0)]
- public ulong MessageId { get; set; }
-
- [Key, Column("emoji", Order = 1)]
- public string Emoji { get; set; }
-
- [Column("role_id")]
- public ulong RoleId { get; set; }
- }
-}
-
diff --git a/helpers/napiszarservice.cs b/helpers/napiszarservice.cs
deleted file mode 100644
index 48bf085..0000000
--- a/helpers/napiszarservice.cs
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using System.Linq;
-using T3k3rg0.Helpers.Data;
-using T3k3rg0.Helpers.Models;
-
-namespace T3k3rg0.Helpers
-{
- public static class NapiszarService
- {
- private static readonly TimeZoneInfo HungarianTimeZone =
- TimeZoneInfo.FindSystemTimeZoneById("Europe/Budapest");
-
- public static string GetRandomSzar()
- {
- using var db = new NapiszarDbContext();
- var count = db.Joslatok.Count();
-
- if (count == 0)
- return "Nincs elérhető szar";
-
- var rnd = new Random();
- var skip = rnd.Next(count);
-
- var szar = db.Joslatok.Skip(skip).FirstOrDefault();
- return szar?.Szoveg ?? "Valami szar hiba történt";
- }
-
- public static bool HasUsedToday(ulong userId)
- {
- using var db = new NapiszarDbContext();
-
- var usage = db.DailyUsages.FirstOrDefault(u => u.UserId == (long)userId);
- if (usage == null)
- return false;
-
- var today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, HungarianTimeZone).Date;
- return usage.LastUsed.Date == today;
- }
-
- public static void LogUsage(ulong userId)
- {
- using var db = new NapiszarDbContext();
-
- var today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, HungarianTimeZone);
-
- var existing = db.DailyUsages.FirstOrDefault(u => u.UserId == (long)userId);
- if (existing == null)
- {
- db.DailyUsages.Add(new DailyUsage
- {
- UserId = (long)userId,
- LastUsed = today
- });
- }
- else
- {
- existing.LastUsed = today;
- db.DailyUsages.Update(existing);
- }
-
- db.SaveChanges();
- }
- }
-}
-
diff --git a/helpers/reactionroleservice.cs b/helpers/reactionroleservice.cs
deleted file mode 100644
index 9a55f66..0000000
--- a/helpers/reactionroleservice.cs
+++ /dev/null
@@ -1,99 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using T3k3rg0.Helpers.Data;
-using T3k3rg0.Helpers.Models;
-using System.Threading.Tasks;
-using Microsoft.EntityFrameworkCore;
-
-namespace T3k3rg0.Helpers
-{
- public static class ReactionRoleService
- {
- public static ulong? GetRoleId(ulong messageId, string emoji)
- {
- using var db = new RolesDbContext();
- var entry = db.ReactionRoles
- .FirstOrDefault(r => r.MessageId == messageId && r.Emoji == emoji);
-
- return entry?.RoleId;
- }
-
- public static List<(string Emoji, ulong RoleId)> GetAllRolesForMessage(ulong messageId)
- {
- using var db = new RolesDbContext();
- return db.ReactionRoles
- .Where(r => r.MessageId == messageId)
- .ToList()
- .Select(r => (r.Emoji, r.RoleId))
- .ToList();
- }
-
- public static void AddReactionRole(ulong messageId, string emoji, ulong roleId)
- {
- using var db = new RolesDbContext();
- db.ReactionRoles.Add(new ReactionRole
- {
- MessageId = messageId,
- Emoji = emoji,
- RoleId = roleId
- });
- db.SaveChanges();
- }
-
- public static void RemoveReactionRole(ulong messageId, string emoji)
- {
- using var db = new RolesDbContext();
- var entry = db.ReactionRoles
- .FirstOrDefault(r => r.MessageId == messageId && r.Emoji == emoji);
-
- if (entry != null)
- {
- db.ReactionRoles.Remove(entry);
- db.SaveChanges();
- }
- }
-
- public static List GetAllReactionRoles()
- {
- using var db = new RolesDbContext();
- return db.ReactionRoles.ToList(); // Minden rekord lekérése az adatbázisból
- }
- public static async Task> GetAllReactionRolesAsync()
- {
- await using var db = new RolesDbContext();
- return await db.ReactionRoles
- .OrderBy(r => r.MessageId)
- .ThenBy(r => r.Emoji)
- .ToListAsync();
- }
-
- public static async Task<(bool Success, string? Message, string? Emoji, ulong? RoleId)> RemoveReactionRoleByIdAsync(int id)
- {
- try
- {
- await using var db = new RolesDbContext();
-
- var allRoles = (await db.ReactionRoles.ToListAsync())
- .OrderBy(r => r.MessageId)
- .ThenBy(r => r.Emoji)
- .ToList();
-
- if (id < 1 || id > allRoles.Count)
- return (false, "❌ Érvénytelen ID.", null, null);
-
- var toRemove = allRoles[id - 1];
- db.ReactionRoles.Remove(toRemove);
- await db.SaveChangesAsync();
-
- return (true, null, toRemove.Emoji, toRemove.RoleId);
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.ToString());
- return (false, "❌ Hiba történt az eltávolítás során.", null, null);
- }
- }
- }
-}
-
diff --git a/helpers/reactionrolestorage.cs b/helpers/reactionrolestorage.cs
new file mode 100644
index 0000000..dae5288
--- /dev/null
+++ b/helpers/reactionrolestorage.cs
@@ -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;
+ }
+ }
+}
+
diff --git a/program.cs b/program.cs
index 9166407..f4aa47b 100644
--- a/program.cs
+++ b/program.cs
@@ -34,7 +34,6 @@ namespace T3k3rg0
commands.RegisterCommands();
commands.RegisterCommands();
commands.RegisterCommands();
- commands.RegisterCommands();
ReactionRoleHandler.Register(discord);
await discord.ConnectAsync();