diff --git a/Common.cs b/Common.cs
index 6a49ea0..3136a51 100644
--- a/Common.cs
+++ b/Common.cs
@@ -1,68 +1,53 @@
using Discord.WebSocket;
-using System;
using System.Collections.Generic;
using System.Text;
-namespace BirthdayBot
-{
- static class Common
- {
- ///
- /// Formats a user's name to a consistent, readable format which makes use of their nickname.
- ///
- public static string FormatName(SocketGuildUser member, bool ping)
- {
- if (ping) return member.Mention;
+namespace BirthdayBot;
- static string escapeFormattingCharacters(string input)
- {
- var result = new StringBuilder();
- foreach (var c in input)
- {
- if (c is '\\' or '_' or '~' or '*' or '@')
- {
- result.Append('\\');
- }
- result.Append(c);
+static class Common {
+ ///
+ /// Formats a user's name to a consistent, readable format which makes use of their nickname.
+ ///
+ public static string FormatName(SocketGuildUser member, bool ping) {
+ if (ping) return member.Mention;
+
+ static string escapeFormattingCharacters(string input) {
+ var result = new StringBuilder();
+ foreach (var c in input) {
+ if (c is '\\' or '_' or '~' or '*' or '@') {
+ result.Append('\\');
}
- return result.ToString();
+ result.Append(c);
}
-
- var username = escapeFormattingCharacters(member.Username);
- if (member.Nickname != null)
- {
- return $"**{escapeFormattingCharacters(member.Nickname)}** ({username}#{member.Discriminator})";
- }
- return $"**{username}**#{member.Discriminator}";
+ return result.ToString();
}
- public static readonly Dictionary MonthNames = new()
- {
- {1, "Jan"}, {2, "Feb"}, {3, "Mar"}, {4, "Apr"}, {5, "May"}, {6, "Jun"},
- {7, "Jul"}, {8, "Aug"}, {9, "Sep"}, {10, "Oct"}, {11, "Nov"}, {12, "Dec"}
- };
+ var username = escapeFormattingCharacters(member.Username);
+ if (member.Nickname != null) {
+ return $"**{escapeFormattingCharacters(member.Nickname)}** ({username}#{member.Discriminator})";
+ }
+ return $"**{username}**#{member.Discriminator}";
+ }
- public static string BotUptime => (DateTimeOffset.UtcNow - Program.BotStartTime).ToString("d' days, 'hh':'mm':'ss");
+ public static Dictionary MonthNames { get; } = new() {
+ { 1, "Jan" }, { 2, "Feb" }, { 3, "Mar" }, { 4, "Apr" }, { 5, "May" }, { 6, "Jun" },
+ { 7, "Jul" }, { 8, "Aug" }, { 9, "Sep" }, { 10, "Oct" }, { 11, "Nov" }, { 12, "Dec" }
+ };
- ///
- /// An alternative to .
- /// Returns true if *most* members have been downloaded.
- ///
- public static bool HasMostMembersDownloaded(SocketGuild guild)
- {
- if (guild.HasAllMembers) return true;
- if (guild.MemberCount > 30)
- {
- // For guilds of size over 30, require 85% or more of the members to be known
- // (26/30, 42/50, 255/300, etc)
- int threshold = (int)(guild.MemberCount * 0.85);
- return guild.DownloadedMemberCount >= threshold;
- }
- else
- {
- // For smaller guilds, fail if two or more members are missing
- return guild.MemberCount - guild.DownloadedMemberCount <= 2;
- }
+ ///
+ /// An alternative to .
+ /// Returns true if *most* members have been downloaded.
+ ///
+ public static bool HasMostMembersDownloaded(SocketGuild guild) {
+ if (guild.HasAllMembers) return true;
+ if (guild.MemberCount > 30) {
+ // For guilds of size over 30, require 85% or more of the members to be known
+ // (26/30, 42/50, 255/300, etc)
+ int threshold = (int)(guild.MemberCount * 0.85);
+ return guild.DownloadedMemberCount >= threshold;
+ } else {
+ // For smaller guilds, fail if two or more members are missing
+ return guild.MemberCount - guild.DownloadedMemberCount <= 2;
}
}
}
diff --git a/Program.cs b/Program.cs
index d6d32bc..b827fba 100644
--- a/Program.cs
+++ b/Program.cs
@@ -6,7 +6,12 @@ namespace BirthdayBot;
class Program {
private static ShardManager _bot;
- public static DateTimeOffset BotStartTime { get; } = DateTimeOffset.UtcNow;
+ private static readonly DateTimeOffset _botStartTime = DateTimeOffset.UtcNow;
+
+ ///
+ /// Returns the amount of time the program has been running in a human-readable format.
+ ///
+ public static string BotUptime => (DateTimeOffset.UtcNow - _botStartTime).ToString("d' days, 'hh':'mm':'ss");
static async Task Main() {
var cfg = new Configuration();
diff --git a/ShardManager.cs b/ShardManager.cs
index b1e3a2d..3910023 100644
--- a/ShardManager.cs
+++ b/ShardManager.cs
@@ -105,7 +105,7 @@ class ShardManager : IDisposable {
Log("Warning: Not all shards terminated cleanly after 30 seconds. Continuing...");
}
- Log($"Uptime: {Common.BotUptime}");
+ Log($"Uptime: {Program.BotUptime}");
}
private void Log(string message) => Program.Log(nameof(ShardManager), message);
@@ -158,7 +158,7 @@ class ShardManager : IDisposable {
private async Task StatusLoop() {
try {
while (!_mainCancel.IsCancellationRequested) {
- Log($"Bot uptime: {Common.BotUptime}");
+ Log($"Bot uptime: {Program.BotUptime}");
// Iterate through shard list, extract data
var guildInfo = new Dictionary();
diff --git a/UserInterface/HelpInfoCommands.cs b/UserInterface/HelpInfoCommands.cs
index d026927..137a001 100644
--- a/UserInterface/HelpInfoCommands.cs
+++ b/UserInterface/HelpInfoCommands.cs
@@ -156,7 +156,7 @@ namespace BirthdayBot.UserInterface
//strStats.AppendLine("Server count: " + Discord.Guilds.Count.ToString());
// TODO restore this statistic
strStats.AppendLine("Shard #" + instance.ShardId.ToString("00"));
- strStats.AppendLine("Uptime: " + Common.BotUptime);
+ strStats.AppendLine("Uptime: " + Program.BotUptime);
// TODO fun stats
// current birthdays, total names registered, unique time zones