Initial system for new joke handling
This commit is contained in:
parent
7ee274ed7b
commit
2fe04c2d1e
|
@ -1,93 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text.RegularExpressions;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using DeukBot4.APIHandlers;
|
|
||||||
using DeukBot4.Utilities;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
namespace DeukBot4.MessageHandlers
|
|
||||||
{
|
|
||||||
public static class JokeHandlers
|
|
||||||
{
|
|
||||||
public static async Task DeltaHandler(SocketMessage message)
|
|
||||||
{
|
|
||||||
var lowerCasedContent = message.Content.ToLowerInvariant().RemoveSpecialCharacters();
|
|
||||||
if (lowerCasedContent.Contains("origin"))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var lowerSplit = lowerCasedContent.Split(' ');
|
|
||||||
if (lowerSplit.Select(s => Lehvenstein.LevenshteinDistance(s, "delta")).Any(diff => diff <= 1))
|
|
||||||
{
|
|
||||||
var warning = "uhh excuse me it's called\n Origin and it's an art";
|
|
||||||
await message.Channel.SendFileAsync(await CatPicHandler.GetCatPicture(warning), "cat_pic.png");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static async Task DadJokeHandler(SocketMessage message)
|
|
||||||
{
|
|
||||||
if (!(message.Author is IGuildUser guildUser))
|
|
||||||
return;
|
|
||||||
string newName;
|
|
||||||
var content = message.Content;
|
|
||||||
var lower = content.ToLowerInvariant();
|
|
||||||
|
|
||||||
if (lower.StartsWith("hi "))
|
|
||||||
{
|
|
||||||
lower = lower.Remove(0, 3);
|
|
||||||
content = content.Remove(0, 3);
|
|
||||||
}
|
|
||||||
else if (lower.StartsWith("hello "))
|
|
||||||
{
|
|
||||||
lower = lower.Remove(0, 6);
|
|
||||||
content = content.Remove(0, 6);
|
|
||||||
}
|
|
||||||
if (lower[0] != 'i')
|
|
||||||
return;
|
|
||||||
if (lower.StartsWith("i'm "))
|
|
||||||
{
|
|
||||||
newName = content.Remove(0, 4);
|
|
||||||
}
|
|
||||||
else if (lower.StartsWith("im "))
|
|
||||||
{
|
|
||||||
newName = content.Remove(0, 3);
|
|
||||||
}
|
|
||||||
else if (lower.StartsWith("i am "))
|
|
||||||
{
|
|
||||||
newName = content.Remove(0, 5);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (newName.Length > 15)
|
|
||||||
return;
|
|
||||||
|
|
||||||
await message.Channel.SendMessageAsync($"Hi {newName}, i'm Deukbot");
|
|
||||||
await guildUser.ModifyAsync(user => user.Nickname = newName);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static readonly Regex ThanksMatcher = new Regex(@"(?i)((\b)thanks*(\W|$)+)");
|
|
||||||
private static readonly string[] ThanksResponses = {
|
|
||||||
"You're welcome!", "No problem",
|
|
||||||
"It was the least I could do, I always do the least I can do!",
|
|
||||||
"Yes, well, we'd be absolutely nowhere without me.",
|
|
||||||
"Yeah no problem, I'm the only one who does work around here anyway",
|
|
||||||
"I gotchu, bb."
|
|
||||||
};
|
|
||||||
private static int _pos = 0;
|
|
||||||
public static async Task ThanksHandler(SocketMessage message)
|
|
||||||
{
|
|
||||||
var content = message.Content;
|
|
||||||
if (ThanksMatcher.IsMatch(content))
|
|
||||||
{
|
|
||||||
var response = ThanksResponses[_pos];
|
|
||||||
_pos = (_pos + 1) % ThanksResponses.Length;
|
|
||||||
message.Channel.SendMessageAsync(response);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers.JokeHandling
|
||||||
|
{
|
||||||
|
internal class DadJoke : IJokeController
|
||||||
|
{
|
||||||
|
public string Id => "dad";
|
||||||
|
public string Name => "Hi I'm dad";
|
||||||
|
|
||||||
|
private Regex _regex = new Regex(@".*i['| a]*m ([\w\s]{3,15})$",
|
||||||
|
RegexOptions.IgnoreCase | RegexOptions.CultureInvariant);
|
||||||
|
|
||||||
|
public async Task Run(SocketMessage message)
|
||||||
|
{
|
||||||
|
if (!(message.Author is IGuildUser guildUser))
|
||||||
|
return;
|
||||||
|
var content = message.Content;
|
||||||
|
var match = _regex.Match(content);
|
||||||
|
if (match.Success)
|
||||||
|
{
|
||||||
|
var newName = match.Groups[1].Value;
|
||||||
|
await message.Channel.SendMessageAsync($"Hi {newName}, i'm Deukbot");
|
||||||
|
await guildUser.ModifyAsync(user => user.Nickname = newName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using DeukBot4.APIHandlers;
|
||||||
|
using DeukBot4.Utilities;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers.JokeHandling
|
||||||
|
{
|
||||||
|
internal class DeltaJoke : IJokeController
|
||||||
|
{
|
||||||
|
public string Id => "delta";
|
||||||
|
public string Name => "No deltas, it's called Origin";
|
||||||
|
public async Task Run(SocketMessage message)
|
||||||
|
{
|
||||||
|
var lowerCasedContent = message.Content.ToLowerInvariant().RemoveSpecialCharacters();
|
||||||
|
if (lowerCasedContent.Contains("origin"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
var lowerSplit = lowerCasedContent.Split(' ');
|
||||||
|
if (lowerSplit.Select(s => Lehvenstein.LevenshteinDistance(s, "delta")).Any(diff => diff <= 1))
|
||||||
|
{
|
||||||
|
var warning = "uhh excuse me it's called\n Origin and it's an art";
|
||||||
|
await message.Channel.SendFileAsync(await CatPicHandler.GetCatPicture(warning), "cat_pic.png");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers.JokeHandling
|
||||||
|
{
|
||||||
|
public interface IJokeController
|
||||||
|
{
|
||||||
|
string Id { get; }
|
||||||
|
string Name { get; }
|
||||||
|
|
||||||
|
Task Run(SocketMessage message);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers.JokeHandling
|
||||||
|
{
|
||||||
|
public static class JokeHandler
|
||||||
|
{
|
||||||
|
public static readonly Dictionary<string, IJokeController> Jokes = new Dictionary<string, IJokeController>();
|
||||||
|
|
||||||
|
public static void Initialize()
|
||||||
|
{
|
||||||
|
var jokes = typeof(JokeHandler).Assembly.GetTypes()
|
||||||
|
.Where(x => typeof(IJokeController).IsAssignableFrom(x) && !x.IsInterface);
|
||||||
|
foreach (var joke in jokes)
|
||||||
|
{
|
||||||
|
var c = (IJokeController)Activator.CreateInstance(joke);
|
||||||
|
Jokes.Add(c.Id, c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async Task RunJokes(SocketMessage message)
|
||||||
|
{
|
||||||
|
foreach (var jokeController in Jokes)
|
||||||
|
{
|
||||||
|
jokeController.Value.Run(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
namespace DeukBot4.MessageHandlers.JokeHandling
|
||||||
|
{
|
||||||
|
internal class ThanksJoke : IJokeController
|
||||||
|
{
|
||||||
|
public string Id => "thanks";
|
||||||
|
public string Name => "Claim credit when people say thanks";
|
||||||
|
|
||||||
|
private readonly Regex ThanksMatcher = new Regex(@"(?i)((\b)thanks*(\W|$)+)");
|
||||||
|
private readonly string[] ThanksResponses = {
|
||||||
|
"You're welcome!", "No problem",
|
||||||
|
"It was the least I could do, I always do the least I can do!",
|
||||||
|
"Yes, well, we'd be absolutely nowhere without me.",
|
||||||
|
"Yeah no problem, I'm the only one who does work around here anyway",
|
||||||
|
"I gotchu, bb."
|
||||||
|
};
|
||||||
|
private static int _pos = 0;
|
||||||
|
|
||||||
|
public async Task Run(SocketMessage message)
|
||||||
|
{
|
||||||
|
var content = message.Content;
|
||||||
|
if (ThanksMatcher.IsMatch(content))
|
||||||
|
{
|
||||||
|
var response = ThanksResponses[_pos];
|
||||||
|
_pos = (_pos + 1) % ThanksResponses.Length;
|
||||||
|
message.Channel.SendMessageAsync(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using DeukBot4.MessageHandlers.JokeHandling;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
|
||||||
|
@ -22,9 +23,7 @@ namespace DeukBot4.MessageHandlers
|
||||||
HandlePrivateMessage(message);
|
HandlePrivateMessage(message);
|
||||||
ReminderHandler.HandleReminder(message);
|
ReminderHandler.HandleReminder(message);
|
||||||
ImageBackupHandler.Backup(message);
|
ImageBackupHandler.Backup(message);
|
||||||
JokeHandlers.DeltaHandler(message);
|
JokeHandler.RunJokes(message);
|
||||||
JokeHandlers.DadJokeHandler(message);
|
|
||||||
JokeHandlers.ThanksHandler(message);
|
|
||||||
#pragma warning restore 4014
|
#pragma warning restore 4014
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -4,6 +4,7 @@ using DeukBot4.Database;
|
||||||
using DeukBot4.Database.ServerSettings;
|
using DeukBot4.Database.ServerSettings;
|
||||||
using DeukBot4.MessageHandlers;
|
using DeukBot4.MessageHandlers;
|
||||||
using DeukBot4.MessageHandlers.CommandHandler;
|
using DeukBot4.MessageHandlers.CommandHandler;
|
||||||
|
using DeukBot4.MessageHandlers.JokeHandling;
|
||||||
using Discord;
|
using Discord;
|
||||||
using Discord.Commands.Builders;
|
using Discord.Commands.Builders;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
@ -37,6 +38,7 @@ namespace DeukBot4
|
||||||
Settings = Settings.FromJsonFile("settings.json");
|
Settings = Settings.FromJsonFile("settings.json");
|
||||||
DatabaseConnection.ConnectionString = Settings.DatabaseConnectionString;
|
DatabaseConnection.ConnectionString = Settings.DatabaseConnectionString;
|
||||||
await SetupScheduler();
|
await SetupScheduler();
|
||||||
|
JokeHandler.Initialize();
|
||||||
|
|
||||||
DatabaseInitializer.Initialize();
|
DatabaseInitializer.Initialize();
|
||||||
ServerSettingHandler.OnBotStartUp();
|
ServerSettingHandler.OnBotStartUp();
|
||||||
|
|
Loading…
Reference in New Issue