diff --git a/DiscordBot/Data/FuzzTable.cs b/DiscordBot/Data/FuzzTable.cs index 6d423672..a6efd391 100644 --- a/DiscordBot/Data/FuzzTable.cs +++ b/DiscordBot/Data/FuzzTable.cs @@ -26,20 +26,28 @@ public class FuzzTable private List choices = new(); private Queue recent = new(); + // By default, multiple equal entries adds weight to their selection. + // If true, duplicates are rejected silently. + // + public bool Unique { get; set; } = false; + public void Clear() { choices.Clear(); recent.Clear(); + Unique = false; } public int Count => choices.Count + recent.Count; // Add a string as a valid choice from which to pick. // Note that empty strings or whitespace can be added manually as valid choices. - // Duplicate choices are also allowed for weighting. + // Duplicate choices are also allowed for weighting, unless Unique is set true. // public void Add(string choice) { + if (Unique && choices.Contains(choice)) + return; choices.Add(choice); } diff --git a/DiscordBot/Modules/UserModule.cs b/DiscordBot/Modules/UserModule.cs index d8bc3b65..b743972a 100644 --- a/DiscordBot/Modules/UserModule.cs +++ b/DiscordBot/Modules/UserModule.cs @@ -623,6 +623,7 @@ public async Task SlapUser(params IUser[] users) { try { + _slapObjects.Unique = true; if (_slapObjects.Count == 0) _slapObjects.Load(Settings.UserModuleSlapObjectsTable); }