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;
        }