public GarlicBreadCommandContext(DiscordBotBase bot, IPrefix prefix, CachedUserMessage message,
                                  IServiceScope scope, RuntimeFlags flags) : base(bot, prefix, message, scope.ServiceProvider)
 {
     ServiceScope = scope;
     Flags        = flags;
     Member       = base.Member;
 }
Example #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TranslateService"/> class.
 /// </summary>
 /// <param name="bot">The discord bot.</param>
 /// <param name="config">The bot's default configuration.</param>
 /// <param name="logger">The log handler.</param>
 public TranslateService(DiscordBotBase bot, Config config, Logger logger)
 {
     Config             = config;
     Logger             = logger;
     translator         = new GoogleTranslator();
     bot.ReactionAdded += ReactionAddedAsync;
 }
Example #3
0
 public TypeLoaderService(ILogger <TypeLoaderService> logger, DiscordBotBase client) : base(logger, client)
 {
     _typeInfos        = new List <TypeInfo>();
     _extensionMethods = new List <MethodInfo>();
     PopulateTypeCache();
     PopulateExtensionCache();
 }
Example #4
0
 public ReminderService(
     SchedulingService scheduler,
     IServiceProvider services,
     ILogger <ReminderService> logger,
     DiscordBotBase bot)
     : base(logger, bot)
 {
     _services              = services;
     _scheduler             = scheduler;
     _scheduledReminderDict = new Dictionary <int, ScheduledTask>();
 }
Example #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EventHandler"/> class.
 /// </summary>
 /// <param name="bot">The discord bot events should be logged for.</param>
 /// <param name="logger">The log handler, used for handling generic logging.</param>
 public EventHandler(DiscordBotBase bot, Logger logger, InteractivityExtension ext, CachingMechanism.EntityCache cache)
 {
     _cache             = cache;
     Bot                = bot;
     Logger             = logger;
     Ext                = ext;
     Bot.Logger.Logged += Logger_MessageLogged;
     if (bot is DiscordBotSharder sharder)
     {
         sharder.ShardReady += Bot_ShardReady;
     }
     Bot.Ready                  += ReadyAsync;
     Bot.CommandExecuted        += CommandExecutedAsync;
     Bot.CommandExecutionFailed += CommandExecutionFailedAsync;
     Bot.ReactionAdded          += Bot_ReactionAdded;
     Bot.ReactionRemoved        += Bot_ReactionRemoved;
 }
Example #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="EventHandler"/> class.
        /// </summary>
        /// <param name="bot">The discord bot events should be logged for.</param>
        /// <param name="logger">The log handler, used for handling generic logging.</param>
        public EventHandler(DiscordBotBase bot, Logger logger)
        {
            Bot    = bot;
            Logger = logger;

            Bot.Logger.Logged += Logger_MessageLogged;
            if (bot is DiscordBotSharder sharder)
            {
                sharder.ShardReady += Bot_ShardReady;
            }
            Bot.Ready                  += ReadyAsync;
            Bot.CommandExecuted        += CommandExecutedAsync;
            Bot.CommandExecutionFailed += CommandExecutionFailedAsync;

#if DEBUG
            Bot.MessageReceived += Bot_MessageReceived;
#endif
        }
Example #7
0
 public EmoteService(HttpClient httpClient, FileTypeGuesser fileTypeGuesser, ILogger <EmoteService> logger, DiscordBotBase bot) : base(logger, bot)
 {
     _httpClient = httpClient;
     _httpClient.DefaultRequestHeaders.UserAgent.Clear();
     _httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Global.BotName, Global.BotVersion));
     _httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue($"({Global.BotRepo})"));
     _fileTypeGuesser = fileTypeGuesser;
     _logger          = logger;
 }
Example #8
0
 public AatroxCommandContext(DiscordBotBase bot, CachedUserMessage message, IPrefix prefix)
     : base(bot, prefix, message)
 {
     _databaseContext = new DatabaseCommandContext(
         this, ServiceProvider.GetRequiredService <AatroxDbContext>());
 }
 public EntrantPollingService(ILogger <EntrantPollingService> logger, DiscordBotBase bot)
     : base(logger, bot)
 {
     _bot    = bot;
     _random = bot.Services.GetRequiredService <Random>();
 }
 /// <summary>
 ///     Instantiates a new <see cref="DiscordBotService"/> with the specified logger and bot client.
 /// </summary>
 /// <param name="logger"> The logger to use. </param>
 /// <param name="bot"> The bot client to use. </param>
 protected DiscordBotService(
     ILogger logger,
     DiscordBotBase bot)
     : base(logger, bot)
 {
 }
Example #11
0
 public DocumentationLoaderService(IConfiguration configuration, ILogger <DocumentationLoaderService> logger, DiscordBotBase bot)
     : base(logger, bot)
 {
     _documentation      = new Dictionary <string, string>();
     _nugetCacheLocation = configuration["nuget:cache_location"];
     LoadDocs();
 }
Example #12
0
        public async Task <DiscordBotBase> ConfigureAsync()
        {
            var config = Config.ParseArguments(args);

            logger = new Logger(Logger.LogLevel.Info, Path.Combine(Config.FilesPath, "logs"));
            DbConnection.Initialize(config);

            // Ensure the database is migrated to the latest version prior to any other code execution.
            using (var db = new DataContext())
            {
                await db.Database.MigrateAsync();

                await db.SaveChangesAsync();
            }

            IServiceCollection botServiceCollection = new ServiceCollection()
                                                      .AddSingleton <HttpClient>()
                                                      .AddSingleton(new CachingMechanism.EntityCache(60));

            // Gets services marked with the Service attribute, adds them to the service collection
            var services = Assembly.GetExecutingAssembly().GetServices();

            foreach (var type in services)
            {
                botServiceCollection = botServiceCollection.AddSingleton(type);
            }

            var interactive = new InteractivityExtension();
            var token       = config.GetOrAddEntry(Config.Defaults.Token.ToString(), () =>
            {
                logger.Log(
                    $"Please input bot token, can be found at: " +
                    $"{Constants.DeveloperApplicationLink}",
                    Logger.Source.Bot);
                return(Console.ReadLine());
            });
            var prefix = config.GetOrAddEntry(Config.Defaults.Prefix.ToString(), () =>
            {
                logger.Log("Please input bot prefix",
                           Logger.Source.Bot);
                return(Console.ReadLine());
            });
            var shardCount = int.Parse(config.GetOrAddEntry(Config.Defaults.ShardCount.ToString(), () =>
            {
                logger.Log(
                    $"Please input desired shard count (discord allows a maximum of 2500 guilds per shard): ",
                    Logger.Source.Bot);

                string value;

                // Iterate until valid integer is provided.
                do
                {
                    value = Console.ReadLine();
                }while (!int.TryParse(value, out var x) || x <= 0);

                return(value);
            }));

            bool multiProcessSharding = false;

            if (shardCount > 1)
            {
                multiProcessSharding = bool.Parse(config.GetOrAddEntry("MultiProcess", () =>
                {
                    logger.Log(
                        $"Using multi-process sharding? (true/false): ",
                        Logger.Source.Bot);

                    string value;

                    do
                    {
                        value = Console.ReadLine();
                    }while (!bool.TryParse(value, out var x));

                    return(value);
                }));
            }

            var            prefixProvider = new DefaultPrefixProvider().AddPrefix(prefix);
            DiscordBotBase bot;

            if (!multiProcessSharding)
            {
                bot = new DiscordBotSharder(
                    TokenType.Bot,
                    token,
                    prefixProvider,
                    new DiscordBotSharderConfiguration
                {
                    ProviderFactory = bot => botServiceCollection
                                      .AddSingleton(bot)
                                      .AddSingleton(config)
                                      .AddSingleton(logger)
                                      .AddSingleton(interactive)
                                      .BuildServiceProvider(),
                    ShardCount = shardCount
                });
            }
            else
            {
                bot = new DiscordBot(TokenType.Bot, token, prefixProvider, new DiscordBotConfiguration()
                {
                    ProviderFactory = bot => botServiceCollection
                                      .AddSingleton(bot)
                                      .AddSingleton(config)
                                      .AddSingleton(logger)
                                      .AddSingleton(interactive)
                                      .BuildServiceProvider(),
                    ShardCount = shardCount,
                    ShardId    = int.Parse(config.GetOrAddEntry("ShardId", () =>
                    {
                        logger.Log(
                            $"Please input shard ID:",
                            Logger.Source.Bot);

                        string value;

                        // Iterate until valid integer is provided.
                        do
                        {
                            value = Console.ReadLine();
                        }while (!int.TryParse(value, out var x) || x < 0);

                        return(value);
                    }))
                });
 public DocSearchService(SearchService searchService, ILogger <DocSearchService> logger, DiscordBotBase client) : base(logger, client)
 {
     _searchService = searchService;
 }
 public DiscordBotRunnerService(
     ILogger <DiscordBotRunnerService> logger,
     DiscordBotBase bot)
     : base(logger, bot)
 {
 }
 public SearchService(TypeLoaderService typeLoaderService, DocumentationLoaderService documentationLoaderService, ILogger <SearchService> logger, DiscordBotBase client) : base(logger, client)
 {
     _typeLoaderService          = typeLoaderService;
     _documentationLoaderService = documentationLoaderService;
     _allSearchables             = new List <ISearchable>();
     _searchableTypes            = new List <SearchableType>();
     BuildCaches();
 }