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 ;
2023-06-15 23:29:07 -04:00
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
}
}
2023-06-15 23:29:07 -04:00
static Behaver ( ) { }
2023-06-01 00:03:23 -04:00
2023-06-15 23:29:07 -04:00
private static readonly Behaver _instance = new Behaver ( ) ;
2023-06-01 00:03:23 -04:00
2023-06-15 23:29:07 -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 ;
2023-08-22 14:58:44 -04:00
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-08-22 14:58:44 -04:00
@"┐(゚ ~゚ )┌" , @"¯\_(ツ)_/¯" , @"╮ (. ❛ ᴗ ❛.) ╭" , @"╮(╯ _╰ )╭"
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