This repository has been archived on 2023-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
discord-bot-shtik/Behavior/Behaver.cs

62 lines
2.3 KiB
C#
Raw Normal View History

2023-06-01 00:03:23 -04:00
namespace vassago.Behavior;
#pragma warning disable 4014 //the "not awaited" error
using vassago.Models;
using System;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Collections.Generic;
public class Behaver
2023-06-01 00:03:23 -04:00
{
2023-06-18 22:10:51 -04:00
private static List<Behavior> behaviors { get; set; } = new List<Behavior>();
internal Behaver()
{
var subtypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(domainAssembly => domainAssembly.GetTypes())
.Where(type => type.IsSubclassOf(typeof(Behavior)) && !type.IsAbstract)
.ToList();
foreach (var subtype in subtypes)
{
behaviors.Add((Behavior)Activator.CreateInstance(subtype));
}
}
static Behaver() { }
2023-06-01 00:03:23 -04:00
private static readonly Behaver _instance = new Behaver();
2023-06-01 00:03:23 -04:00
public static Behaver Instance
2023-06-01 00:03:23 -04:00
{
get { return _instance; }
}
public async Task<bool> ActOn(Message message)
{
2023-06-18 22:10:51 -04:00
foreach (var behavior in behaviors)
{
2023-06-19 11:03:06 -04:00
if (behavior.ShouldAct(message))
2023-06-18 22:10:51 -04:00
{
2023-06-19 11:03:06 -04:00
behavior.ActOn(message);
2023-06-18 22:10:51 -04:00
message.ActedOn = true;
}
}
2023-06-19 12:56:40 -04:00
if (message.ActedOn == false && message.MentionsMe && message.Content.Contains('?'))
2023-06-18 22:10:51 -04:00
{
Console.WriteLine("providing bullshit nonanswer / admitting uselessness");
var responses = new List<string>(){
@"Well, that's a great question, and there are certainly many different possible answers. Ultimately, the decision will depend on a variety of factors, including your personal interests and goals, as well as any practical considerations (like the economy). I encourage you to do your research, speak with experts and educators, and explore your options before making a decision that's right for you.",
@"┐(゚ ~゚ )┌",@"¯\_(ツ)_/¯",@"╮ (. ❛ ᴗ ❛.) ╭", @"╮(╯ _╰ )╭"
};
await message.Channel.SendMessage(responses[Shared.r.Next(responses.Count)]);
message.ActedOn = true;
}
if (message.ActedOn)
{
Shared.dbContext.SaveChanges();
}
return message.ActedOn;
2023-06-01 00:03:23 -04:00
}
}
#pragma warning restore 4014 //the "async not awaited" error