public CustomReactionsService(PermissionService perms, DbService db, NadekoStrings strings, DiscordSocketClient client, CommandHandler cmd, IBotConfigProvider bc, IDataCache cache, GlobalPermissionService gperm, NadekoBot bot) { _log = LogManager.GetCurrentClassLogger(); _db = db; _client = client; _perms = perms; _cmd = cmd; _bc = bc; _strings = strings; _cache = cache; _gperm = gperm; var sub = _cache.Redis.GetSubscriber(); sub.Subscribe(_client.CurrentUser.Id + "_crs.reload", (ch, msg) => { ReloadInternal(bot.GetCurrentGuildConfigs()); }, StackExchange.Redis.CommandFlags.FireAndForget); sub.Subscribe(_client.CurrentUser.Id + "_gcr.added", (ch, msg) => { var cr = JsonConvert.DeserializeObject <CustomReaction>(msg); _globalReactions.TryAdd(cr.Id, cr); }, StackExchange.Redis.CommandFlags.FireAndForget); sub.Subscribe(_client.CurrentUser.Id + "_gcr.deleted", (ch, msg) => { var id = int.Parse(msg); _globalReactions.TryRemove(id, out _); }, StackExchange.Redis.CommandFlags.FireAndForget); sub.Subscribe(_client.CurrentUser.Id + "_gcr.edited", (ch, msg) => { var obj = new { Id = 0, Res = "", Ad = false, Dm = false, Ca = false, Re = "" }; obj = JsonConvert.DeserializeAnonymousType(msg, obj); if (_globalReactions.TryGetValue(obj.Id, out var gcr)) { gcr.Response = obj.Res; gcr.AutoDeleteTrigger = obj.Ad; gcr.DmResponse = obj.Dm; gcr.ContainsAnywhere = obj.Ca; gcr.Reactions = obj.Re; } }, StackExchange.Redis.CommandFlags.FireAndForget); ReloadInternal(bot.AllGuildConfigs); bot.JoinedGuild += Bot_JoinedGuild; _client.LeftGuild += _client_LeftGuild; }