129 lines
No EOL
6.3 KiB
C#
129 lines
No EOL
6.3 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace EllieBot.Common;
|
|
|
|
public sealed partial class ReplacementPatternStore
|
|
{
|
|
private static readonly Regex _rngRegex = new(@"%rng(?:(?<from>(?:-)?\d+)-(?<to>(?:-)?\d+))?%",
|
|
RegexOptions.Compiled);
|
|
|
|
|
|
private void WithDefault()
|
|
{
|
|
Register("%bot.time%",
|
|
static () => DateTime.Now.ToShortTimeString());
|
|
|
|
Register("%bot.date%",
|
|
static () => DateTime.Now.ToShortDateString());
|
|
}
|
|
|
|
private void WithClient()
|
|
{
|
|
Register("%bot.status%", static (DiscordSocketClient client) => client.Status.ToString());
|
|
Register("%bot.latency%", static (DiscordSocketClient client) => client.Latency.ToString());
|
|
Register("%bot.name%", static (DiscordSocketClient client) => client.CurrentUser.Username);
|
|
Register("%bot.fullname%", static (DiscordSocketClient client) => client.CurrentUser.ToString());
|
|
Register("%bot.discrim%", static (DiscordSocketClient client) => client.CurrentUser.Discriminator);
|
|
Register("%bot.id%", static (DiscordSocketClient client) => client.CurrentUser.Id.ToString());
|
|
Register("%bot.avatar%",
|
|
static (DiscordSocketClient client) => client.CurrentUser.RealAvatarUrl().ToString());
|
|
|
|
Register("%bot.mention%", static (DiscordSocketClient client) => client.CurrentUser.Mention);
|
|
|
|
Register("%shard.servercount%", static (DiscordSocketClient c) => c.Guilds.Count.ToString());
|
|
Register("%shard.usercount%",
|
|
static (DiscordSocketClient c) => c.Guilds.Sum(g => g.MemberCount).ToString());
|
|
Register("%shard.id%", static (DiscordSocketClient c) => c.ShardId.ToString());
|
|
}
|
|
|
|
private void WithServer()
|
|
{
|
|
Register("%server%", static (IGuild g) => g.Name);
|
|
Register("%server.id%", static (IGuild g) => g.Id.ToString());
|
|
Register("%server.name%", static (IGuild g) => g.Name);
|
|
Register("%server.icon%", static (IGuild g) => g.IconUrl);
|
|
Register("%server.members%", static (IGuild g) => (g as SocketGuild)?.MemberCount.ToString() ?? "?");
|
|
Register("%server.boosters%", static (IGuild g) => g.PremiumSubscriptionCount.ToString());
|
|
Register("%server.boost_level%", static (IGuild g) => ((int)g.PremiumTier).ToString());
|
|
}
|
|
|
|
private void WithChannel()
|
|
{
|
|
Register("%channel%", static (IMessageChannel ch) => ch.Name);
|
|
Register("%channel.mention%",
|
|
static (IMessageChannel ch) => (ch as ITextChannel)?.Mention ?? "#" + ch.Name);
|
|
Register("%channel.name%", static (IMessageChannel ch) => ch.Name);
|
|
Register("%channel.id%", static (IMessageChannel ch) => ch.Id.ToString());
|
|
Register("%channel.created%",
|
|
static (IMessageChannel ch) => ch.CreatedAt.ToString("HH:mm dd.MM.yyyy"));
|
|
Register("%channel.nsfw%",
|
|
static (IMessageChannel ch) => (ch as ITextChannel)?.IsNsfw.ToString() ?? "-");
|
|
Register("%channel.topic%", static (IMessageChannel ch) => (ch as ITextChannel)?.Topic ?? "-");
|
|
}
|
|
|
|
private void WithUsers()
|
|
{
|
|
Register("%user%", static (IUser user) => user.Mention);
|
|
Register("%user.mention%", static (IUser user) => user.Mention);
|
|
Register("%user.fullname%", static (IUser user) => user.ToString()!);
|
|
Register("%user.name%", static (IUser user) => user.Username);
|
|
Register("%user.displayname%", static (IUser user) => user is IGuildUser gu ? gu.DisplayName : user.Username);
|
|
Register("%user.discrim%", static (IUser user) => user.Discriminator);
|
|
Register("%user.avatar%", static (IUser user) => user.RealAvatarUrl().ToString());
|
|
Register("%user.id%", static (IUser user) => user.Id.ToString());
|
|
Register("%user.created_time%", static (IUser user) => user.CreatedAt.ToString("HH:mm"));
|
|
Register("%user.created_date%", static (IUser user) => user.CreatedAt.ToString("dd.MM.yyyy"));
|
|
Register("%user.joined_time%", static (IGuildUser user) => user.JoinedAt?.ToString("HH:mm") ?? "??:??");
|
|
Register("%user.joined_date%",
|
|
static (IGuildUser user) => user.JoinedAt?.ToString("dd.MM.yyyy") ?? "??.??.????");
|
|
|
|
Register("%user%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.Mention)));
|
|
Register("%user.mention%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.Mention)));
|
|
Register("%user.fullname%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.ToString())));
|
|
Register("%user.name%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.Username)));
|
|
Register("%user.discrim%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.Discriminator)));
|
|
Register("%user.avatar%",
|
|
static (IUser[] users)
|
|
=> string.Join(" ", users.Select(user => user.RealAvatarUrl().ToString())));
|
|
Register("%user.id%",
|
|
static (IUser[] users) => string.Join(" ", users.Select(user => user.Id.ToString())));
|
|
Register("%user.created_time%",
|
|
static (IUser[] users)
|
|
=> string.Join(" ", users.Select(user => user.CreatedAt.ToString("HH:mm"))));
|
|
Register("%user.created_date%",
|
|
static (IUser[] users)
|
|
=> string.Join(" ", users.Select(user => user.CreatedAt.ToString("dd.MM.yyyy"))));
|
|
Register("%user.joined_time%",
|
|
static (IUser[] users) => string.Join(" ",
|
|
users.Select(user => (user as IGuildUser)?.JoinedAt?.ToString("HH:mm") ?? "-")));
|
|
Register("%user.joined_date%",
|
|
static (IUser[] users) => string.Join(" ",
|
|
users.Select(user => (user as IGuildUser)?.JoinedAt?.ToString("dd.MM.yyyy") ?? "-")));
|
|
}
|
|
|
|
private void WithRegex()
|
|
{
|
|
Register(_rngRegex,
|
|
match =>
|
|
{
|
|
var rng = new EllieRandom();
|
|
if (!int.TryParse(match.Groups["from"].ToString(), out var from))
|
|
from = 0;
|
|
if (!int.TryParse(match.Groups["to"].ToString(), out var to))
|
|
to = 0;
|
|
|
|
if (from == 0 && to == 0)
|
|
return rng.Next(0, 11).ToString();
|
|
|
|
if (from >= to)
|
|
return string.Empty;
|
|
|
|
return rng.Next(from, to + 1).ToString();
|
|
});
|
|
}
|
|
} |