vassago/Behavior/Behaver.cs

64 lines
2.6 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-20 21:26:44 -04:00
private ChattingContext _db;
public List<Account> Selves { get; internal set; } = new List<Account>();
public static List<Behavior> Behaviors { get; private set; } = new List<Behavior>();
2023-06-18 22:10:51 -04:00
internal Behaver()
{
2023-06-20 21:26:44 -04:00
_db = new ChattingContext();
2023-06-18 22:10:51 -04:00
var subtypes = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(domainAssembly => domainAssembly.GetTypes())
2023-06-20 21:26:44 -04:00
.Where(type => type.IsSubclassOf(typeof(Behavior)) && !type.IsAbstract &&
type.GetCustomAttributes(typeof(StaticPlzAttribute),false)?.Any() == true)
2023-06-18 22:10:51 -04:00
.ToList();
foreach (var subtype in subtypes)
{
2023-06-20 21:26:44 -04:00
Behaviors.Add((Behavior)Activator.CreateInstance(subtype));
2023-06-18 22:10:51 -04:00
}
}
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-20 21:26:44 -04:00
foreach (var behavior in Behaviors)
2023-06-18 22:10:51 -04:00
{
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;
Console.WriteLine("acted on, moving forward");
2023-06-18 22:10:51 -04:00
}
}
2023-06-20 21:26:44 -04:00
if (message.ActedOn == false && message.MentionsMe && message.Content.Contains('?') && !Behaver.Instance.Selves.Any(acc => acc.Id == message.Author.Id))
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.",
@"┐(゚ ~゚ )┌", @"¯\_(ツ)_/¯", @"╮ (. ❛ ᴗ ❛.) ╭", @"╮(╯ _╰ )╭"
2023-06-18 22:10:51 -04:00
};
await message.Channel.SendMessage(responses[Shared.r.Next(responses.Count)]);
message.ActedOn = true;
}
return message.ActedOn;
2023-06-01 00:03:23 -04:00
}
}
#pragma warning restore 4014 //the "async not awaited" error