mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
delete last bot message if told to shut up
This commit is contained in:
committed by
Roberto Anić Banić
parent
7ffd507b5e
commit
5205fe184c
@@ -14,15 +14,15 @@ namespace CompatBot.EventHandlers
|
||||
{
|
||||
public static async Task OnMessageCreated(MessageCreateEventArgs args)
|
||||
{
|
||||
args.Handled = !await IsClean(args.Client, args.Message).ConfigureAwait(false);
|
||||
args.Handled = !await IsClean(args.Client, args.Message, args.Guild).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public static async Task OnMessageEdit(MessageUpdateEventArgs args)
|
||||
{
|
||||
args.Handled = !await IsClean(args.Client, args.Message).ConfigureAwait(false);
|
||||
args.Handled = !await IsClean(args.Client, args.Message, args.Guild).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
private static async Task<bool> IsClean(DiscordClient client, DiscordMessage message)
|
||||
private static async Task<bool> IsClean(DiscordClient client, DiscordMessage message, DiscordGuild guild)
|
||||
{
|
||||
if (message.Author.IsBot)
|
||||
return true;
|
||||
@@ -30,7 +30,7 @@ namespace CompatBot.EventHandlers
|
||||
if (string.IsNullOrEmpty(message.Content) || message.Content.StartsWith(Config.CommandPrefix))
|
||||
return true;
|
||||
|
||||
if ((message.Author as DiscordMember)?.Roles.IsWhitelisted() ?? false)
|
||||
if (message.Author.IsWhitelisted(client, guild))
|
||||
return true;
|
||||
|
||||
string trigger = null;
|
||||
|
||||
56
CompatBot/EventHandlers/BotShutupHandler.cs
Normal file
56
CompatBot/EventHandlers/BotShutupHandler.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using CompatBot.Utils;
|
||||
using DSharpPlus.Entities;
|
||||
using DSharpPlus.EventArgs;
|
||||
using NReco.Text;
|
||||
|
||||
namespace CompatBot.EventHandlers
|
||||
{
|
||||
internal static class BotShutupHandler
|
||||
{
|
||||
private static readonly AhoCorasickDoubleArrayTrie<string> ChillCheck = new AhoCorasickDoubleArrayTrie<string>(new[] { "shut the fuck up", "shut up", "shutup", "hush", "chill" }.ToDictionary(s => s, s => s), true);
|
||||
|
||||
public static async Task OnMessageCreated(MessageCreateEventArgs args)
|
||||
{
|
||||
if (args.Channel.IsPrivate)
|
||||
return;
|
||||
|
||||
if (args.Author.IsBot)
|
||||
return;
|
||||
|
||||
if (string.IsNullOrEmpty(args.Message.Content) || args.Message.Content.StartsWith(Config.CommandPrefix))
|
||||
return;
|
||||
|
||||
if (!args.Author.IsWhitelisted(args.Client, args.Guild))
|
||||
return;
|
||||
|
||||
if (!NeedToSilence(args.Message))
|
||||
return;
|
||||
|
||||
await args.Message.ReactWithAsync(args.Client, DiscordEmoji.FromUnicode("😟"), "Okay (._.)").ConfigureAwait(false);
|
||||
var lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, 20, DateTime.UtcNow.AddSeconds(-30)).ConfigureAwait(false);
|
||||
if (lastBotMessages.OrderBy(m => m.CreationTimestamp).FirstOrDefault(m => m.Author.IsCurrent) is DiscordMessage msg)
|
||||
await msg.DeleteAsync("asked to shut up").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
internal static bool NeedToSilence(DiscordMessage msg)
|
||||
{
|
||||
if (string.IsNullOrEmpty(msg.Content))
|
||||
return false;
|
||||
|
||||
var needToChill = false;
|
||||
ChillCheck.ParseText(msg.Content, h =>
|
||||
{
|
||||
needToChill = true;
|
||||
return false;
|
||||
});
|
||||
if (!needToChill)
|
||||
return false;
|
||||
|
||||
return msg.Content.Contains("bot") || (msg.MentionedUsers?.Any(u => u.IsCurrent) ?? false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -57,6 +57,7 @@ namespace CompatBot.EventHandlers
|
||||
return;
|
||||
}
|
||||
|
||||
bool parsedLog = false;
|
||||
try
|
||||
{
|
||||
foreach (var attachment in message.Attachments.Where(a => a.FileSize < Config.AttachmentSizeLimit))
|
||||
@@ -65,6 +66,7 @@ namespace CompatBot.EventHandlers
|
||||
{
|
||||
await args.Channel.TriggerTypingAsync().ConfigureAwait(false);
|
||||
Console.WriteLine($">>>>>>> {message.Id%100} Parsing log from attachment {attachment.FileName} ({attachment.FileSize})...");
|
||||
parsedLog = true;
|
||||
LogParseState result = null;
|
||||
try
|
||||
{
|
||||
@@ -85,7 +87,7 @@ namespace CompatBot.EventHandlers
|
||||
{
|
||||
if (result.Error == LogParseState.ErrorCode.PiracyDetected)
|
||||
{
|
||||
if ((args.Message.Author as DiscordMember)?.Roles.IsWhitelisted() ?? false)
|
||||
if (args.Author.IsWhitelisted(args.Client, args.Guild))
|
||||
{
|
||||
await Task.WhenAll(
|
||||
args.Channel.SendMessageAsync("I see wha' ye did thar ☠"),
|
||||
@@ -137,7 +139,8 @@ namespace CompatBot.EventHandlers
|
||||
finally
|
||||
{
|
||||
QueueLimiter.Release();
|
||||
Console.WriteLine($"<<<<<<< {message.Id % 100} Finished parsing");
|
||||
if (parsedLog)
|
||||
Console.WriteLine($"<<<<<<< {message.Id % 100} Finished parsing");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ using CompatBot.Utils.ResultFormatters;
|
||||
using DSharpPlus;
|
||||
using DSharpPlus.Entities;
|
||||
using DSharpPlus.EventArgs;
|
||||
using NReco.Text;
|
||||
|
||||
namespace CompatBot.EventHandlers
|
||||
{
|
||||
@@ -21,9 +20,8 @@ namespace CompatBot.EventHandlers
|
||||
// see http://www.psdevwiki.com/ps3/Productcode
|
||||
public static readonly Regex ProductCode = new Regex(@"(?<letters>(?:[BPSUVX][CL]|P[ETU]|NP)[AEHJKPUIX][ABSM])[ \-]?(?<numbers>\d{5})", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
private static readonly Client compatClient = new Client();
|
||||
private static readonly AhoCorasickDoubleArrayTrie<string> ChillCheck = new AhoCorasickDoubleArrayTrie<string>(new[] {"shut up", "hush", "chill"}.ToDictionary(s => s, s => s), true);
|
||||
|
||||
public static async Task OnMessageMention(MessageCreateEventArgs args)
|
||||
public static async Task OnMessageCreated(MessageCreateEventArgs args)
|
||||
{
|
||||
if (args.Author.IsBot)
|
||||
return;
|
||||
@@ -33,7 +31,7 @@ namespace CompatBot.EventHandlers
|
||||
|
||||
var lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, 20, DateTime.UtcNow.AddSeconds(-30)).ConfigureAwait(false);
|
||||
foreach (var msg in lastBotMessages)
|
||||
if (NeedToSilence(msg))
|
||||
if (BotShutupHandler.NeedToSilence(msg))
|
||||
return;
|
||||
|
||||
lastBotMessages = await args.Channel.GetMessagesBeforeAsync(args.Message.Id, Config.ProductCodeLookupHistoryThrottle).ConfigureAwait(false);
|
||||
@@ -82,24 +80,6 @@ namespace CompatBot.EventHandlers
|
||||
.ToList();
|
||||
}
|
||||
|
||||
private static bool NeedToSilence(DiscordMessage msg)
|
||||
{
|
||||
if (string.IsNullOrEmpty(msg.Content))
|
||||
return false;
|
||||
|
||||
var needToChill = false;
|
||||
ChillCheck.ParseText(msg.Content, h =>
|
||||
{
|
||||
needToChill = true;
|
||||
return false;
|
||||
});
|
||||
if (!needToChill)
|
||||
return false;
|
||||
|
||||
return msg.Content.Contains("bot") || (msg.MentionedUsers?.Any(u => u.IsCurrent) ?? false);
|
||||
|
||||
}
|
||||
|
||||
public static async Task<DiscordEmbed> LookupGameInfoAsync(this DiscordClient client, string code, bool footer = true)
|
||||
{
|
||||
if (string.IsNullOrEmpty(code))
|
||||
|
||||
@@ -80,7 +80,7 @@ namespace CompatBot.EventHandlers
|
||||
|
||||
// in case it's not in cache and doesn't contain any info, including Author
|
||||
message = await channel.GetMessageAsync(message.Id).ConfigureAwait(false);
|
||||
if ((message.Author as DiscordMember)?.Roles.IsWhitelisted() ?? false)
|
||||
if (message.Author.IsWhitelisted(client, channel.Guild))
|
||||
return;
|
||||
|
||||
var users = await message.GetReactionsAsync(emoji).ConfigureAwait(false);
|
||||
|
||||
@@ -98,9 +98,10 @@ namespace CompatBot
|
||||
client.MessageReactionAdded += Starbucks.Handler;
|
||||
|
||||
client.MessageCreated += AntipiracyMonitor.OnMessageCreated; // should be first
|
||||
client.MessageCreated += ProductCodeLookup.OnMessageMention;
|
||||
client.MessageCreated += ProductCodeLookup.OnMessageCreated;
|
||||
client.MessageCreated += LogInfoHandler.OnMessageCreated;
|
||||
client.MessageCreated += LogsAsTextMonitor.OnMessageCreated;
|
||||
client.MessageCreated += BotShutupHandler.OnMessageCreated;
|
||||
|
||||
client.MessageUpdated += AntipiracyMonitor.OnMessageEdit;
|
||||
|
||||
|
||||
@@ -1,11 +1,27 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CompatBot.Database.Providers;
|
||||
using DSharpPlus;
|
||||
using DSharpPlus.Entities;
|
||||
|
||||
namespace CompatBot.Utils
|
||||
{
|
||||
internal static class RolesExtensions
|
||||
{
|
||||
public static bool IsWhitelisted(this DiscordUser user, DiscordClient client, DiscordGuild guild = null)
|
||||
{
|
||||
if (ModProvider.IsMod(user.Id))
|
||||
return true;
|
||||
|
||||
var member = guild == null ? client.GetMember(user) : client.GetMember(guild, user);
|
||||
return member?.Roles.IsWhitelisted() ?? false;
|
||||
}
|
||||
|
||||
public static bool IsWhitelisted(this DiscordMember member)
|
||||
{
|
||||
return ModProvider.IsMod(member.Id) || member.Roles.IsWhitelisted();
|
||||
}
|
||||
|
||||
public static bool IsWhitelisted(this IEnumerable<DiscordRole> memberRoles)
|
||||
{
|
||||
return memberRoles?.Any(r => Config.Moderation.RoleWhiteList.Contains(r.Name)) ?? false;
|
||||
|
||||
Reference in New Issue
Block a user