Fix ping-like query failing; other small changes
This commit is contained in:
parent
9e09800bff
commit
dc61e93a7f
4 changed files with 24 additions and 14 deletions
|
@ -5,7 +5,7 @@ class ModuleConfig {
|
|||
public EntityName Role { get; }
|
||||
|
||||
public ModuleConfig(JObject conf) {
|
||||
var cfgRole = conf["Role"]?.Value<string>();
|
||||
var cfgRole = conf[nameof(Role)]?.Value<string>();
|
||||
if (string.IsNullOrWhiteSpace(cfgRole))
|
||||
throw new ModuleLoadException("Role was not specified.");
|
||||
Role = new EntityName(cfgRole);
|
||||
|
|
|
@ -141,7 +141,7 @@ class ResponseExecutor {
|
|||
result = await _bot.KickAsync(_guild, $"Rule '{_rule.Label}'", _user.Id,
|
||||
parameter, _rule.NotifyUserOfRemoval);
|
||||
}
|
||||
if (result.ErrorForbidden) return FromError(ForbiddenGenericError);
|
||||
if (result.ErrorForbidden) return FromError(Strings.ForbiddenGenericError);
|
||||
if (result.ErrorNotFound) return FromError("The target user is no longer in the server.");
|
||||
if (_rule.NotifyChannelOfRemoval) await _msg.Channel.SendMessageAsync(result.GetResultString(_bot));
|
||||
return FromSuccess(result.MessageSendSuccess ? null : "Unable to send notification DM.");
|
||||
|
|
|
@ -2,12 +2,18 @@
|
|||
using Discord.WebSocket;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace RegexBot.Common;
|
||||
/// <summary>
|
||||
/// Miscellaneous utility methods useful for the bot and modules.
|
||||
/// </summary>
|
||||
public static class Utilities {
|
||||
public static Regex ChannelMention { get; } = new(@"<#(?<snowflake>\d+)>", RegexOptions.Compiled);
|
||||
public static Regex CustomEmoji { get; } = new(@"<:(?<name>[A-Za-z0-9_]{2,}):(?<ID>\d+)>", RegexOptions.Compiled);
|
||||
public static Regex DiscriminatorSearch { get; } = new(@"(.+)#(\d{4}(?!\d))", RegexOptions.Compiled);
|
||||
public static Regex UserMention { get; } = new(@"<@!?(?<snowflake>\d+)>", RegexOptions.Compiled);
|
||||
|
||||
/// <summary>
|
||||
/// Performs common checks on the specified message to see if it fits all the criteria of a
|
||||
/// typical, ordinary message sent by an ordinary guild user.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
using Discord.WebSocket;
|
||||
using RegexBot.Common;
|
||||
using RegexBot.Data;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace RegexBot.Services.EntityCache;
|
||||
/// <summary>
|
||||
|
@ -10,8 +10,6 @@ namespace RegexBot.Services.EntityCache;
|
|||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Performance", "CA1822:Mark members as static")]
|
||||
class UserCachingSubservice {
|
||||
private static Regex DiscriminatorSearch { get; } = new(@"(.+)#(\d{4}(?!\d))", RegexOptions.Compiled);
|
||||
|
||||
internal UserCachingSubservice(RegexbotClient bot) {
|
||||
bot.DiscordClient.GuildMembersDownloaded += DiscordClient_GuildMembersDownloaded;
|
||||
bot.DiscordClient.GuildMemberUpdated += DiscordClient_GuildMemberUpdated;
|
||||
|
@ -84,15 +82,18 @@ class UserCachingSubservice {
|
|||
return query.SingleOrDefault();
|
||||
}
|
||||
|
||||
// Is search just a number? Assume ID, pass it on to the correct place.
|
||||
// Is search actually a ping? Extract ID.
|
||||
var m = Utilities.UserMention.Match(search);
|
||||
if (m.Success) search = m.Groups["snowflake"].Value;
|
||||
|
||||
// Is search a number? Assume ID, proceed to query.
|
||||
if (ulong.TryParse(search, out var searchid)) {
|
||||
var idres = innerQuery(searchid, null);
|
||||
if (idres != null) return idres;
|
||||
}
|
||||
|
||||
// If the above fails, assume the number may be a string to search.
|
||||
// All of the above failed. Assume the number may be a string to search.
|
||||
var namesplit = SplitNameAndDiscriminator(search);
|
||||
|
||||
return innerQuery(null, namesplit);
|
||||
}
|
||||
|
||||
|
@ -114,22 +115,25 @@ class UserCachingSubservice {
|
|||
return query.SingleOrDefault();
|
||||
}
|
||||
|
||||
// Is search just a number? Assume ID, pass it on to the correct place.
|
||||
// Is search actually a ping? Extract ID.
|
||||
var m = Utilities.UserMention.Match(search);
|
||||
if (m.Success) search = m.Groups["snowflake"].Value;
|
||||
|
||||
// Is search a number? Assume ID, proceed to query.
|
||||
if (ulong.TryParse(search, out var searchid)) {
|
||||
var idres = innerQuery(guildId, searchid, null);
|
||||
if (idres != null) return idres;
|
||||
}
|
||||
|
||||
// If the above fails, assume the number may be a string to search.
|
||||
// All of the above failed. Assume the number may be a string to search.
|
||||
var namesplit = SplitNameAndDiscriminator(search);
|
||||
|
||||
return innerQuery(guildId, null, namesplit);
|
||||
}
|
||||
|
||||
private static (string, string?) SplitNameAndDiscriminator(string input) {
|
||||
string name;
|
||||
string? disc = null;
|
||||
var split = DiscriminatorSearch.Match(input);
|
||||
var split = Utilities.DiscriminatorSearch.Match(input);
|
||||
if (split.Success) {
|
||||
name = split.Groups[1].Value;
|
||||
disc = split.Groups[2].Value;
|
||||
|
|
Loading…
Reference in a new issue