public SelfService(DiscordSocketClient client, NadekoBot bot, CommandHandler cmdHandler, DbService db, IBotConfigProvider bc, ILocalization localization, NadekoStrings strings, IBotCredentials creds, IDataCache cache) { _redis = cache.Redis; _bot = bot; _cmdHandler = cmdHandler; _db = db; _log = LogManager.GetCurrentClassLogger(); _localization = localization; _strings = strings; _client = client; _creds = creds; _bc = bc; _cache = cache; _imgs = cache.LocalImages; var sub = _redis.GetSubscriber(); sub.Subscribe(_creds.RedisKey() + "_reload_images", delegate { _imgs.Reload(); }, CommandFlags.FireAndForget); sub.Subscribe(_creds.RedisKey() + "_reload_bot_config", delegate { _bc.Reload(); }, CommandFlags.FireAndForget); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); _autoCommands = bc.BotConfig .StartupCommands .Where(x => x.Interval >= 5) .GroupBy(x => x.GuildId) .ToDictionary( x => x.Key, y => y.ToDictionary(x => x.Id, x => TimerFromStartupCommand((StartupCommand)x)) .ToConcurrent()) .ToConcurrent(); foreach (var cmd in bc.BotConfig.StartupCommands.Where(x => x.Interval <= 0)) { try { await ExecuteCommand(cmd); } catch { } } }); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); await Task.Delay(5000).ConfigureAwait(false); if (client.ShardId == 0) { await LoadOwnerChannels().ConfigureAwait(false); } }); }
public SelfService(DiscordSocketClient client, CommandHandler cmdHandler, DbService db, IBotStrings strings, IBotCredentials creds, IDataCache cache, IHttpClientFactory factory, BotConfigService bss) { _redis = cache.Redis; _cmdHandler = cmdHandler; _db = db; _strings = strings; _client = client; _creds = creds; _cache = cache; _imgs = cache.LocalImages; _httpFactory = factory; _bss = bss; var sub = _redis.GetSubscriber(); if (_client.ShardId == 0) { sub.Subscribe(_creds.RedisKey() + "_reload_images", delegate { _imgs.Reload(); }, CommandFlags.FireAndForget); } sub.Subscribe(_creds.RedisKey() + "_leave_guild", async(ch, v) => { try { var guildStr = v.ToString()?.Trim().ToUpperInvariant(); if (string.IsNullOrWhiteSpace(guildStr)) { return; } var server = _client.Guilds.FirstOrDefault(g => g.Id.ToString() == guildStr) ?? _client.Guilds.FirstOrDefault(g => g.Name.Trim().ToUpperInvariant() == guildStr); if (server == null) { return; } if (server.OwnerId != _client.CurrentUser.Id) { await server.LeaveAsync().ConfigureAwait(false); Log.Information($"Left server {server.Name} [{server.Id}]"); } else { await server.DeleteAsync().ConfigureAwait(false); Log.Information($"Deleted server {server.Name} [{server.Id}]"); } } catch { } }, CommandFlags.FireAndForget); }
public SelfService(DiscordSocketClient client, NadekoBot bot, CommandHandler cmdHandler, DbService db, IBotConfigProvider bc, ILocalization localization, NadekoStrings strings, IBotCredentials creds, IDataCache cache) { _redis = cache.Redis; _bot = bot; _cmdHandler = cmdHandler; _db = db; _log = LogManager.GetCurrentClassLogger(); _localization = localization; _strings = strings; _client = client; _creds = creds; _bc = bc; _cache = cache; _imgs = cache.LocalImages; var sub = _redis.GetSubscriber(); sub.Subscribe(_creds.RedisKey() + "_reload_images", delegate { _imgs.Reload(); }, CommandFlags.FireAndForget); sub.Subscribe(_creds.RedisKey() + "_reload_bot_config", delegate { _bc.Reload(); }, CommandFlags.FireAndForget); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); foreach (var cmd in bc.BotConfig.StartupCommands) { var prefix = _cmdHandler.GetPrefix(cmd.GuildId); //if someone already has .die as their startup command, ignore it if (cmd.CommandText.StartsWith(prefix + "die")) { continue; } await cmdHandler.ExecuteExternal(cmd.GuildId, cmd.ChannelId, cmd.CommandText); await Task.Delay(400).ConfigureAwait(false); } }); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); await Task.Delay(5000).ConfigureAwait(false); if (client.ShardId == 0) { await LoadOwnerChannels().ConfigureAwait(false); } }); }
public SelfService(DiscordSocketClient client, NadekoBot bot, CommandHandler cmdHandler, DbService db, IBotConfigProvider bc, ILocalization localization, NadekoStrings strings, IBotCredentials creds, IDataCache cache) { _redis = cache.Redis; _bot = bot; _cmdHandler = cmdHandler; _db = db; _log = LogManager.GetCurrentClassLogger(); _localization = localization; _strings = strings; _client = client; _creds = creds; _bc = bc; _cache = cache; _imgs = cache.LocalImages; if (_client.ShardId == 0) { _updateTimer = new Timer(async _ => { try { var ch = ownerChannels?.Values.FirstOrDefault(); if (ch == null) // no owner channels { return; } var cfo = _bc.BotConfig.CheckForUpdates; if (cfo == UpdateCheckType.None) { return; } string data; if ((cfo == UpdateCheckType.Commit && (data = await GetNewCommit()) != null) || (cfo == UpdateCheckType.Release && (data = await GetNewRelease()) != null)) { await ch.SendConfirmAsync("New Bot Update", data).ConfigureAwait(false); } } catch (Exception ex) { _log.Warn(ex); } }, null, TimeSpan.FromHours(8), TimeSpan.FromHours(8)); } var sub = _redis.GetSubscriber(); sub.Subscribe(_creds.RedisKey() + "_reload_images", delegate { _imgs.Reload(); }, CommandFlags.FireAndForget); sub.Subscribe(_creds.RedisKey() + "_reload_bot_config", delegate { _bc.Reload(); }, CommandFlags.FireAndForget); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); _autoCommands = bc.BotConfig .StartupCommands .Where(x => x.Interval >= 5) .GroupBy(x => x.GuildId) .ToDictionary( x => x.Key, y => y.ToDictionary(x => x.Id, x => TimerFromStartupCommand((StartupCommand)x)) .ToConcurrent()) .ToConcurrent(); foreach (var cmd in bc.BotConfig.StartupCommands.Where(x => x.Interval <= 0)) { try { await ExecuteCommand(cmd); } catch { } } }); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); await Task.Delay(5000).ConfigureAwait(false); if (client.ShardId == 0) { await LoadOwnerChannels().ConfigureAwait(false); } }); }
//private readonly Timer _updateTimer; public SelfService(DiscordSocketClient client, NadekoBot bot, CommandHandler cmdHandler, DbService db, IBotConfigProvider bc, ILocalization localization, NadekoStrings strings, IBotCredentials creds, IDataCache cache, IHttpClientFactory factory) { _redis = cache.Redis; _bot = bot; _cmdHandler = cmdHandler; _db = db; _log = LogManager.GetCurrentClassLogger(); _localization = localization; _strings = strings; _client = client; _creds = creds; _bc = bc; _cache = cache; _imgs = cache.LocalImages; _httpFactory = factory; var sub = _redis.GetSubscriber(); if (_client.ShardId == 0) { sub.Subscribe(_creds.RedisKey() + "_reload_images", delegate { _imgs.Reload(); }, CommandFlags.FireAndForget); //_updateTimer = new Timer(async _ => //{ // try // { // var ch = ownerChannels?.Values.FirstOrDefault(); // if (ch == null) // no owner channels // return; // var cfo = _bc.BotConfig.CheckForUpdates; // if (cfo == UpdateCheckType.None) // return; // string data; // if ((cfo == UpdateCheckType.Commit && (data = await GetNewCommit().ConfigureAwait(false)) != null) // || (cfo == UpdateCheckType.Release && (data = await GetNewRelease().ConfigureAwait(false)) != null)) // { // await ch.SendConfirmAsync("New Bot Update", data).ConfigureAwait(false); // } // } // catch (Exception ex) // { // _log.Warn(ex); // } //}, null, TimeSpan.FromHours(8), TimeSpan.FromHours(8)); } sub.Subscribe(_creds.RedisKey() + "_reload_bot_config", delegate { _bc.Reload(); }, CommandFlags.FireAndForget); sub.Subscribe(_creds.RedisKey() + "_leave_guild", async(ch, v) => { try { var guildStr = v.ToString()?.Trim().ToUpperInvariant(); if (string.IsNullOrWhiteSpace(guildStr)) { return; } var server = _client.Guilds.FirstOrDefault(g => g.Id.ToString() == guildStr) ?? _client.Guilds.FirstOrDefault(g => g.Name.Trim().ToUpperInvariant() == guildStr); if (server == null) { return; } if (server.OwnerId != _client.CurrentUser.Id) { await server.LeaveAsync().ConfigureAwait(false); _log.Info($"Left server {server.Name} [{server.Id}]"); } else { await server.DeleteAsync().ConfigureAwait(false); _log.Info($"Deleted server {server.Name} [{server.Id}]"); } } catch { } }, CommandFlags.FireAndForget); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); _autoCommands = bc.BotConfig .StartupCommands .Where(x => x.Interval >= 5) .GroupBy(x => x.GuildId) .ToDictionary( x => x.Key, y => y.ToDictionary(x => x.Id, x => TimerFromStartupCommand((StartupCommand)x)) .ToConcurrent()) .ToConcurrent(); foreach (var cmd in bc.BotConfig.StartupCommands.Where(x => x.Interval <= 0)) { try { await ExecuteCommand(cmd).ConfigureAwait(false); } catch { } } }); Task.Run(async() => { await bot.Ready.Task.ConfigureAwait(false); await Task.Delay(5000).ConfigureAwait(false); if (client.ShardId == 0) { await LoadOwnerChannels().ConfigureAwait(false); } }); }