diff --git a/src/internal/bot/auto_scrubber.go b/src/internal/bot/auto_scrubber.go index 8b64326..0406650 100644 --- a/src/internal/bot/auto_scrubber.go +++ b/src/internal/bot/auto_scrubber.go @@ -63,6 +63,7 @@ func runScrubber() { err := b.DiscordSession.MessageReactionRemove(e.ChannelID, e.MessageID, e.EmojiID, e.UserID) if err != nil { slog.Error("Error removing emoji reaction", "err", err, "emoji", e.EmojiID, "user", e.UserID) + continue } // We care if we can't delete from our DB.. diff --git a/src/internal/bot/commands.go b/src/internal/bot/commands.go index 8be5bd1..f25f903 100644 --- a/src/internal/bot/commands.go +++ b/src/internal/bot/commands.go @@ -154,7 +154,7 @@ func showTopEmojis(s *discordgo.Session, i *discordgo.InteractionCreate) { users := []string{} if top[v].EmojiID == top[v].EmojiName { // Handle bad data with stock emojis - msg += fmt.Sprintf("%s %d", top[v].EmojiName, top[v].Count) + msg += fmt.Sprintf(":%s: %d", top[v].EmojiName, top[v].Count) } else { msg += fmt.Sprintf("<:%s:%s> %d", top[v].EmojiName, top[v].EmojiID, top[v].Count) } @@ -219,7 +219,7 @@ func showTopUsers(s *discordgo.Session, i *discordgo.InteractionCreate) { for _, sv := range subkeys { if topUsers[sv].EmojiID == topUsers[sv].EmojiName { // Handle bad data with stock emojis - users = append(users, fmt.Sprintf("%s %d", topUsers[sv].EmojiName, topUsers[sv].Count)) + users = append(users, fmt.Sprintf(":%s: %d", topUsers[sv].EmojiName, topUsers[sv].Count)) } else { users = append(users, fmt.Sprintf("<:%s:%s> %d", topUsers[sv].EmojiName, topUsers[sv].EmojiID, topUsers[sv].Count)) } @@ -282,7 +282,7 @@ func addAutoScrubber(s *discordgo.Session, i *discordgo.InteractionCreate) { s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ - Content: fmt.Sprintf("Error auto scrubbing user %s: %+v", user.Username, err.Error()), + Content: fmt.Sprintf("Error auto scrubbing user %s", user.Username), AllowedMentions: &discordgo.MessageAllowedMentions{}, }, }) @@ -293,7 +293,7 @@ func addAutoScrubber(s *discordgo.Session, i *discordgo.InteractionCreate) { s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{ Type: discordgo.InteractionResponseChannelMessageWithSource, Data: &discordgo.InteractionResponseData{ - Content: fmt.Sprintf("Will remove %s's emojis after %d minutes", user.Username, minutes), + Content: fmt.Sprintf("Will remove %s's emojis every %d minutes", user.Username, minutes), AllowedMentions: &discordgo.MessageAllowedMentions{}, }, }) diff --git a/src/internal/bot/common.go b/src/internal/bot/common.go new file mode 100644 index 0000000..8eae14e --- /dev/null +++ b/src/internal/bot/common.go @@ -0,0 +1,10 @@ +package bot + +func orderMap(m map[string]int64) []string { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + + return keys +} diff --git a/src/internal/bot/main.go b/src/internal/bot/main.go index ba42ebe..af8a0bb 100644 --- a/src/internal/bot/main.go +++ b/src/internal/bot/main.go @@ -69,9 +69,6 @@ func (bot *Bot) Start() error { bot.RegisterCommands() b = bot - // Add scrubber - initScrubber() - // Keep running untill there is NO os interruption (ctrl + C) slog.Info("Bot is now running. Press CTRL-C to exit.") c := make(chan os.Signal, 1) diff --git a/src/internal/db/auto_scrubber.go b/src/internal/db/auto_scrubber.go index 1e1f38a..6e8b1a6 100644 --- a/src/internal/db/auto_scrubber.go +++ b/src/internal/db/auto_scrubber.go @@ -13,7 +13,7 @@ type AutoScrubber struct { // AddAutoScrubber - Add an auto scrubber for a guild/user func (db *Database) AddAutoScrubber(guildID, userID string, duration time.Duration) error { _, err := db.db.Exec( - "INSERT INTO `auto_scrubber` (`guild_id`, `user_id`, `duration`) VALUES (?,?,?)", + "INSERT IGNORE INTO `auto_scrubber` (`guild_id`, `user_id`, `duration`) VALUES (?,?,?)", guildID, userID, duration, ) diff --git a/src/internal/db/emoji_usage.go b/src/internal/db/emoji_usage.go index 7482d14..c74a7ab 100644 --- a/src/internal/db/emoji_usage.go +++ b/src/internal/db/emoji_usage.go @@ -173,7 +173,7 @@ func (db *Database) GetTopEmojisForGuildUser(guildID string, userID string, num func (db *Database) GetRecentEmojisForUser(guildID string, userID string, hours int64) ([]EmojiUsage, error) { var data []EmojiUsage row, err := db.db.Query( - "SELECT id, guild_id, channel_id, message_id, user_id, emoji_id, emoji_name, timestamp "+ + "SELECT guild_id, channel_id, message_id, user_id, emoji_id, emoji_name, timestamp "+ "FROM `emoji_usage` WHERE `guild_id` = ? AND `user_id` = ? AND timestamp >= datetime('now', '-"+fmt.Sprintf("%d", hours)+" hours') "+ "ORDER BY timestamp DESC", guildID, @@ -187,7 +187,7 @@ func (db *Database) GetRecentEmojisForUser(guildID string, userID string, hours defer row.Close() for row.Next() { usage := EmojiUsage{} - row.Scan(&usage.ID, &usage.GuildID, &usage.ChannelID, &usage.MessageID, &usage.UserID, &usage.EmojiID, &usage.EmojiName, &usage.Timestamp) + row.Scan(&usage.GuildID, &usage.ChannelID, &usage.MessageID, &usage.UserID, &usage.EmojiID, &usage.EmojiName, &usage.Timestamp) data = append(data, usage) } @@ -198,7 +198,7 @@ func (db *Database) GetRecentEmojisForUser(guildID string, userID string, hours func (db *Database) GetAllEmojisForUser(guildID string, userID string) ([]EmojiUsage, error) { var data []EmojiUsage row, err := db.db.Query( - "SELECT id, guild_id, channel_id, message_id, user_id, emoji_id, emoji_name, timestamp "+ + "SELECT guild_id, channel_id, message_id, user_id, emoji_id, emoji_name, timestamp "+ "FROM `emoji_usage` WHERE `guild_id` = ? AND `user_id` = ?", guildID, userID, @@ -211,7 +211,7 @@ func (db *Database) GetAllEmojisForUser(guildID string, userID string) ([]EmojiU defer row.Close() for row.Next() { usage := EmojiUsage{} - row.Scan(&usage.ID, &usage.GuildID, &usage.ChannelID, &usage.MessageID, &usage.UserID, &usage.EmojiID, &usage.EmojiName, &usage.Timestamp) + row.Scan(&usage.GuildID, &usage.ChannelID, &usage.MessageID, &usage.UserID, &usage.EmojiID, &usage.EmojiName, &usage.Timestamp) data = append(data, usage) }