From 3f937205296d2962111fa4910cf82d46e44220c7 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 15:53:40 -0500
Subject: [PATCH 01/12] Add ToCommaList to StringExtensions.cs
---
DiscordBot/Extensions/StringExtensions.cs | 32 +++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/DiscordBot/Extensions/StringExtensions.cs b/DiscordBot/Extensions/StringExtensions.cs
index a06ed58e..470bb677 100644
--- a/DiscordBot/Extensions/StringExtensions.cs
+++ b/DiscordBot/Extensions/StringExtensions.cs
@@ -122,7 +122,7 @@ public static string GetSha256(this string input)
///
/// Returns true if the string contains only upper case characters, including spaces and all punctuation ie; "I NEED HELP!?!?!?!#$?!" will return true
///
- public static bool IsAlLCaps(this string str)
+ public static bool IsAllCaps(this string str)
{
return Regex.IsMatch(str, @"^[A-Z\s\p{P}]+$");
}
@@ -133,4 +133,32 @@ public static string ToCapitalizeFirstLetter(this string str)
return string.Empty;
return char.ToUpper(str[0]) + str[1..];
}
-}
\ No newline at end of file
+
+ ///
+ /// Joins a list of strings with commas into a natural phrase:
+ /// "apples"
+ /// "apples and bananas"
+ /// "apples, bananas, and cherries"
+ ///
+ /// array of element phrases to be listed
+ /// final conjunction; defaults to "and" if not given
+ public static string ToCommaList(string[] nouns, string conj=null)
+ {
+ if (conj == null)
+ conj = "and";
+ var sb = new StringBuilder();
+ for (int i = 0; i < nouns.Length; i++)
+ {
+ if (i > 0)
+ {
+ if (nouns.Length > 2)
+ sb.Append(",");
+ sb.Append(" ");
+ if (i == nouns.Length-1)
+ sb.Append(conj).Append(" ");
+ }
+ sb.Append(nouns[i]);
+ }
+ return sb.ToString();
+ }
+}
From f04e1b7b8a457579175361bbe9703acf405acb28 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 15:54:38 -0500
Subject: [PATCH 02/12] Fix typo in UnityHelpService.cs
IsAllCaps was spelled as IsAlLCaps (one capital L) in StringExtensions.cs
---
DiscordBot/Services/UnityHelp/UnityHelpService.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/DiscordBot/Services/UnityHelp/UnityHelpService.cs b/DiscordBot/Services/UnityHelp/UnityHelpService.cs
index 62c77b6b..2ae6b3c4 100644
--- a/DiscordBot/Services/UnityHelp/UnityHelpService.cs
+++ b/DiscordBot/Services/UnityHelp/UnityHelpService.cs
@@ -184,7 +184,7 @@ private async Task OnThreadCreated(SocketThreadChannel thread)
}
var threadTitle = thread.Name;
- if (threadTitle.IsAlLCaps())
+ if (threadTitle.IsAllCaps())
{
threadTitle = thread.Name.ToLower();
}
@@ -750,4 +750,4 @@ public int GetTrackedQuestionCount()
#endregion // Utility Methods
-}
\ No newline at end of file
+}
From 0264e9d9c135c4bdfbda6c49d9fd87bb2485c8cd Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:04:27 -0500
Subject: [PATCH 03/12] Offer list and array for ToCommaList in
StringExtensions.cs
---
DiscordBot/Extensions/StringExtensions.cs | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/DiscordBot/Extensions/StringExtensions.cs b/DiscordBot/Extensions/StringExtensions.cs
index 470bb677..4167dfc9 100644
--- a/DiscordBot/Extensions/StringExtensions.cs
+++ b/DiscordBot/Extensions/StringExtensions.cs
@@ -140,7 +140,7 @@ public static string ToCapitalizeFirstLetter(this string str)
/// "apples and bananas"
/// "apples, bananas, and cherries"
///
- /// array of element phrases to be listed
+ /// array or list of element phrases to be listed
/// final conjunction; defaults to "and" if not given
public static string ToCommaList(string[] nouns, string conj=null)
{
@@ -161,4 +161,23 @@ public static string ToCommaList(string[] nouns, string conj=null)
}
return sb.ToString();
}
+ public static string ToCommaList(List nouns, string conj=null)
+ {
+ if (conj == null)
+ conj = "and";
+ var sb = new StringBuilder();
+ for (int i = 0; i < nouns.Count; i++)
+ {
+ if (i > 0)
+ {
+ if (nouns.Count > 2)
+ sb.Append(",");
+ sb.Append(" ");
+ if (i == nouns.Count-1)
+ sb.Append(conj).Append(" ");
+ }
+ sb.Append(nouns[i]);
+ }
+ return sb.ToString();
+ }
}
From d2e1a97b4410be62c09075386de331b265aaf6c2 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:12:52 -0500
Subject: [PATCH 04/12] Add mapped array helpers for UserExtensions.cs
Add users.ToUserPreferredNameArray() and users.ToMentionArray() for convenience and consistency.
---
DiscordBot/Extensions/UserExtensions.cs | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/DiscordBot/Extensions/UserExtensions.cs b/DiscordBot/Extensions/UserExtensions.cs
index 8f341868..76ed2e0b 100644
--- a/DiscordBot/Extensions/UserExtensions.cs
+++ b/DiscordBot/Extensions/UserExtensions.cs
@@ -45,4 +45,20 @@ public static string GetUserLoggingString(this IUser user)
return $"{user.Username} `{user.Id}`";
return $"{guildUser.GetPreferredAndUsername()} `{guildUser.Id}`";
}
-}
\ No newline at end of file
+
+ public static string[] ToUserPreferredNameArray(this IUser[] users)
+ {
+ var names = new string[users.Length];
+ for (int i = 0; i < users.Length; i++)
+ names[i] = GetUserPreferredName(users[i]);
+ return names;
+ }
+
+ public static string[] ToMentionArray(this IUser[] users)
+ {
+ var mentions = new string[users.Length];
+ for (int i = 0; i < users.Length; i++)
+ mentions[i] = users[i].Mention;
+ return mentions;
+ }
+}
From cdbc5683ff6d8c095b94e0565252c9bcc6eedcf3 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:15:22 -0500
Subject: [PATCH 05/12] Update StringExtensions.cs
---
DiscordBot/Extensions/StringExtensions.cs | 21 +--------------------
1 file changed, 1 insertion(+), 20 deletions(-)
diff --git a/DiscordBot/Extensions/StringExtensions.cs b/DiscordBot/Extensions/StringExtensions.cs
index 4167dfc9..bed2dd98 100644
--- a/DiscordBot/Extensions/StringExtensions.cs
+++ b/DiscordBot/Extensions/StringExtensions.cs
@@ -142,7 +142,7 @@ public static string ToCapitalizeFirstLetter(this string str)
///
/// array or list of element phrases to be listed
/// final conjunction; defaults to "and" if not given
- public static string ToCommaList(string[] nouns, string conj=null)
+ public static string ToCommaList(this string[] nouns, string conj=null)
{
if (conj == null)
conj = "and";
@@ -161,23 +161,4 @@ public static string ToCommaList(string[] nouns, string conj=null)
}
return sb.ToString();
}
- public static string ToCommaList(List nouns, string conj=null)
- {
- if (conj == null)
- conj = "and";
- var sb = new StringBuilder();
- for (int i = 0; i < nouns.Count; i++)
- {
- if (i > 0)
- {
- if (nouns.Count > 2)
- sb.Append(",");
- sb.Append(" ");
- if (i == nouns.Count-1)
- sb.Append(conj).Append(" ");
- }
- sb.Append(nouns[i]);
- }
- return sb.ToString();
- }
}
From 5356316acc2b61bca806363d698469cf47b967c0 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:16:57 -0500
Subject: [PATCH 06/12] Update UserModule.cs
Rare surprise for !slap users.
---
DiscordBot/Modules/UserModule.cs | 28 +++++++++++++++++++++++++---
1 file changed, 25 insertions(+), 3 deletions(-)
diff --git a/DiscordBot/Modules/UserModule.cs b/DiscordBot/Modules/UserModule.cs
index 9ad86032..b65276f9 100644
--- a/DiscordBot/Modules/UserModule.cs
+++ b/DiscordBot/Modules/UserModule.cs
@@ -623,10 +623,32 @@ public async Task SlapUser(params IUser[] users)
var sb = new StringBuilder();
var uname = Context.User.GetUserPreferredName();
- sb.Append($"**{uname}** slaps ");
- foreach (var user in users) sb.Append(user.Mention).Append(" ");
- sb.Append("around a bit with a large ").Append(Settings.UserModuleSlapChoices[_random.Next() % Settings.UserModuleSlapChoices.Count]).Append(".");
+ bool fail = (_random.Next(1, 100) < 5);
+
+ if (fail)
+ sb.Append($"**{uname}** tries to slap ");
+ else
+ sb.Append($"**{uname}** slaps ");
+
+ var mentions = users.ToMentionArray();
+ sb.Append(mentions.ToCommaList());
+
+ if (fail)
+ {
+ sb.Append(" around a bit with a large ");
+ sb.Append(Settings.UserModuleSlapChoices[_random.Next() % Settings.UserModuleSlapChoices.Count]);
+ sb.Append(", but misses and ends up ");
+ sb.Append("hurting themselves");
+ // sb.Append(Settings.UserModuleSlapFailChoices[_random.Next() % Settings.UserModuleSlapFailChoices.Count]);
+ sb.Append(".");
+ }
+ else
+ {
+ sb.Append(" around a bit with a large ");
+ sb.Append(Settings.UserModuleSlapChoices[_random.Next() % Settings.UserModuleSlapChoices.Count]);
+ sb.Append(".");
+ }
await Context.Channel.SendMessageAsync(sb.ToString());
await Context.Message.DeleteAfterSeconds(seconds: 1);
From 325a0a16aa7eed0bd0aa51a0d6db128ad43b3a86 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 16:27:08 -0500
Subject: [PATCH 07/12] Remove lint in StringExtensions.cs
---
DiscordBot/Extensions/StringExtensions.cs | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/DiscordBot/Extensions/StringExtensions.cs b/DiscordBot/Extensions/StringExtensions.cs
index bed2dd98..6f2153b4 100644
--- a/DiscordBot/Extensions/StringExtensions.cs
+++ b/DiscordBot/Extensions/StringExtensions.cs
@@ -152,10 +152,10 @@ public static string ToCommaList(this string[] nouns, string conj=null)
if (i > 0)
{
if (nouns.Length > 2)
- sb.Append(",");
- sb.Append(" ");
+ sb.Append(',');
+ sb.Append(' ');
if (i == nouns.Length-1)
- sb.Append(conj).Append(" ");
+ sb.Append(conj).Append(' ');
}
sb.Append(nouns[i]);
}
From 50a76c673e9174b5e3350574f06f50d122a00c0f Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 17:05:56 -0500
Subject: [PATCH 08/12] Testing lists in Settings.cs
---
DiscordBot/Settings/Deserialized/Settings.cs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/DiscordBot/Settings/Deserialized/Settings.cs b/DiscordBot/Settings/Deserialized/Settings.cs
index 342fe0cb..d450784d 100644
--- a/DiscordBot/Settings/Deserialized/Settings.cs
+++ b/DiscordBot/Settings/Deserialized/Settings.cs
@@ -25,7 +25,10 @@ public class BotSettings
#region Fun Commands
- public List UserModuleSlapChoices { get; set; } = new List() { "trout", "duck", "truck", "paddle", "magikarp", "sausage", "student loan", "life choice", "bug report", "unhandled exception", "null pointer", "keyboard", "cheese wheel", "banana peel", "unresolved bug", "low poly donut" };
+ public List UserModuleSlapChoices { get; set; };
+ // = { "trout", "duck", "truck", "paddle", "magikarp", "sausage", "student loan",
+ // "life choice", "bug report", "unhandled exception", "null pointer", "keyboard",
+ // "cheese wheel", "banana peel", "unresolved bug", "low poly donut" };
#endregion // Fun Commands
From d9c9342bba724fcab271809933a070d8307d797c Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 17:06:23 -0500
Subject: [PATCH 09/12] Protecting UserModule.cs
---
DiscordBot/Modules/UserModule.cs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/DiscordBot/Modules/UserModule.cs b/DiscordBot/Modules/UserModule.cs
index b65276f9..5f132714 100644
--- a/DiscordBot/Modules/UserModule.cs
+++ b/DiscordBot/Modules/UserModule.cs
@@ -624,6 +624,9 @@ public async Task SlapUser(params IUser[] users)
var uname = Context.User.GetUserPreferredName();
+ if (Settings.UserModuleSlapChoices == null || Settings.UserModuleSlapChoices.Count == 0)
+ Settings.UserModuleSlapChoices = new List() { "fish", "mallet" };
+
bool fail = (_random.Next(1, 100) < 5);
if (fail)
From 74ce387612bb4c457fa9476aca22c11b4acb9fa5 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 17:07:30 -0500
Subject: [PATCH 10/12] Update Settings.cs
---
DiscordBot/Settings/Deserialized/Settings.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/DiscordBot/Settings/Deserialized/Settings.cs b/DiscordBot/Settings/Deserialized/Settings.cs
index d450784d..e3c39560 100644
--- a/DiscordBot/Settings/Deserialized/Settings.cs
+++ b/DiscordBot/Settings/Deserialized/Settings.cs
@@ -25,7 +25,7 @@ public class BotSettings
#region Fun Commands
- public List UserModuleSlapChoices { get; set; };
+ public List UserModuleSlapChoices { get; set; }
// = { "trout", "duck", "truck", "paddle", "magikarp", "sausage", "student loan",
// "life choice", "bug report", "unhandled exception", "null pointer", "keyboard",
// "cheese wheel", "banana peel", "unresolved bug", "low poly donut" };
From 4b3428281823dd7be9f8c05c0df788a65a09a814 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 17:28:22 -0500
Subject: [PATCH 11/12] Update Settings.cs
---
DiscordBot/Settings/Deserialized/Settings.cs | 3 +++
1 file changed, 3 insertions(+)
diff --git a/DiscordBot/Settings/Deserialized/Settings.cs b/DiscordBot/Settings/Deserialized/Settings.cs
index e3c39560..e188c1c0 100644
--- a/DiscordBot/Settings/Deserialized/Settings.cs
+++ b/DiscordBot/Settings/Deserialized/Settings.cs
@@ -25,10 +25,13 @@ public class BotSettings
#region Fun Commands
+ //NOTE: Deserializer will not override a List from the file if a default one is made here.
public List UserModuleSlapChoices { get; set; }
// = { "trout", "duck", "truck", "paddle", "magikarp", "sausage", "student loan",
// "life choice", "bug report", "unhandled exception", "null pointer", "keyboard",
// "cheese wheel", "banana peel", "unresolved bug", "low poly donut" };
+ public List UserModuleSlapFails { get; set; }
+ // = { "hurting themselves" };
#endregion // Fun Commands
From 84f461f62e30d258b9fcbd1dd1d2db97ef39b2d3 Mon Sep 17 00:00:00 2001
From: Ed Halley <1223980+hariedo@users.noreply.github.com>
Date: Wed, 11 Jun 2025 17:28:29 -0500
Subject: [PATCH 12/12] Update UserModule.cs
---
DiscordBot/Modules/UserModule.cs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/DiscordBot/Modules/UserModule.cs b/DiscordBot/Modules/UserModule.cs
index 5f132714..9fe2994e 100644
--- a/DiscordBot/Modules/UserModule.cs
+++ b/DiscordBot/Modules/UserModule.cs
@@ -626,6 +626,8 @@ public async Task SlapUser(params IUser[] users)
if (Settings.UserModuleSlapChoices == null || Settings.UserModuleSlapChoices.Count == 0)
Settings.UserModuleSlapChoices = new List() { "fish", "mallet" };
+ if (Settings.UserModuleSlapFails == null || Settings.UserModuleSlapFails.Count == 0)
+ Settings.UserModuleSlapFails = new List() { "hurting themselves" };
bool fail = (_random.Next(1, 100) < 5);
@@ -642,8 +644,7 @@ public async Task SlapUser(params IUser[] users)
sb.Append(" around a bit with a large ");
sb.Append(Settings.UserModuleSlapChoices[_random.Next() % Settings.UserModuleSlapChoices.Count]);
sb.Append(", but misses and ends up ");
- sb.Append("hurting themselves");
- // sb.Append(Settings.UserModuleSlapFailChoices[_random.Next() % Settings.UserModuleSlapFailChoices.Count]);
+ sb.Append(Settings.UserModuleSlapFails[_random.Next() % Settings.UserModuleSlapFails.Count]);
sb.Append(".");
}
else