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 { private ChattingContext _db; public List Selves { get; internal set; } = new List(); public static List Behaviors { get; private set; } = new List(); internal Behaver() { _db = new ChattingContext(); var subtypes = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(domainAssembly => domainAssembly.GetTypes()) .Where(type => type.IsSubclassOf(typeof(Behavior)) && !type.IsAbstract && type.GetCustomAttributes(typeof(StaticPlzAttribute),false)?.Any() == true) .ToList(); foreach (var subtype in subtypes) { Behaviors.Add((Behavior)Activator.CreateInstance(subtype)); } } static Behaver() { } private static readonly Behaver _instance = new Behaver(); public static Behaver Instance { get { return _instance; } } public async Task ActOn(Message message) { foreach (var behavior in Behaviors) { if (behavior.ShouldAct(message)) { behavior.ActOn(message); message.ActedOn = true; } } if (message.ActedOn == false && message.MentionsMe && message.Content.Contains('?') && !Behaver.Instance.Selves.Any(acc => acc.Id == message.Author.Id)) { Console.WriteLine("providing bullshit nonanswer / admitting uselessness"); var responses = new List(){ @"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) { _db.SaveChanges(); } return message.ActedOn; } } #pragma warning restore 4014 //the "async not awaited" error