mirror of
https://gitlab.com/Deukhoofd/DeukBot4.git
synced 2026-04-02 02:30:04 +00:00
Initial system for new joke handling
This commit is contained in:
30
DeukBot4/MessageHandlers/JokeHandling/DadJoke.cs
Normal file
30
DeukBot4/MessageHandlers/JokeHandling/DadJoke.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
DeukBot4/MessageHandlers/JokeHandling/DeltaJoke.cs
Normal file
27
DeukBot4/MessageHandlers/JokeHandling/DeltaJoke.cs
Normal file
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
13
DeukBot4/MessageHandlers/JokeHandling/IJokeController.cs
Normal file
13
DeukBot4/MessageHandlers/JokeHandling/IJokeController.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
32
DeukBot4/MessageHandlers/JokeHandling/JokeHandler.cs
Normal file
32
DeukBot4/MessageHandlers/JokeHandling/JokeHandler.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
33
DeukBot4/MessageHandlers/JokeHandling/ThanksJoke.cs
Normal file
33
DeukBot4/MessageHandlers/JokeHandling/ThanksJoke.cs
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user