예제 #1
0
        protected override async ValueTask <DiscordChannelPacket> GetFromCacheAsync(params object[] id)
        {
            if (id.Length == 1)
            {
                return(await cacheClient.HashGetAsync <DiscordChannelPacket>(
                           CacheHelpers.ChannelsKey(), id[0].ToString()));
            }

            return(await cacheClient.HashGetAsync <DiscordChannelPacket>(
                       CacheHelpers.ChannelsKey((ulong)id[1]), id[0].ToString()));
        }
예제 #2
0
        public async Task <IScriptValue> GetAsync(string key)
        {
            if (values.TryGetValue(key, out var value))
            {
                return(value);
            }

            var cacheKey = GetCacheKey(guildId);
            var json     = await cache.HashGetAsync <string>(cacheKey, key);

            if (string.IsNullOrEmpty(json))
            {
                return(Null);
            }

            try
            {
                value = await JsonUtils.ReadJsonAsync(json);
            }
            catch
            {
                value = Null;
            }

            values.AddOrUpdate(key, value, (a1, a2) => value);
            return(value);
        }
예제 #3
0
        /// <inheritdoc />
        public async ValueTask <Optional <Block> > GetBlockAsync(long guildId, string commandName)
        {
            var cachePackage = await cache.HashGetAsync <BlockCache>(
                CommandCacheKey, commandName + ":" + guildId);

            if (cachePackage != null)
            {
                await using var stream = new MemoryStream(cachePackage.Bytes);
                var reader = new BinaryReader(stream);

                return(reader.ReadBlock());
            }

            var repository = unitOfWork.GetRepository <CustomCommand>();

            var command = await repository.GetAsync(guildId, commandName);

            if (command == null)
            {
                return(Optional <Block> .None);
            }

            var block = BlockGenerator.Compile(command.CommandBody);

            await cache.HashUpsertAsync(
                CommandCacheKey, commandName + ":" + guildId, BlockCache.Create(block));

            return(block);
        }
예제 #4
0
        private async Task <TaskPayload> FetchLatestWorkAsync()
        {
            var key = await cacheClient.SortedSetPopAsync <TaskKey>(SchedulerQueueKey);

            if (key == null || string.IsNullOrWhiteSpace(key?.Uuid))
            {
                return(null);
            }
            return(await cacheClient.HashGetAsync <TaskPayload>(
                       GetObjectNamespace(key.OwnerId), key.Uuid));
        }
        protected override async ValueTask <DiscordRolePacket> GetFromCacheAsync(params object[] id)
        {
            var rolePacket = await cacheClient.HashGetAsync <DiscordRolePacket>(
                CacheHelpers.GuildRolesKey((ulong)id[1]), id[0].ToString());

            if (rolePacket != null)
            {
                rolePacket.GuildId = (ulong)id[1];
            }

            return(rolePacket);
        }
예제 #6
0
        /// <inheritdoc />
        public async ValueTask <BlackjackContext> GetAsync(params object[] id)
        {
            if (id.Length != 2)
            {
                throw new ArgumentOutOfRangeException();
            }
            var key     = GetInstanceKey((ulong)id[0], (ulong)id[1]);
            var context = await cache.HashGetAsync <BlackjackContext>(SessionKey, key);

            Logging.Log.Debug($"GET - {SessionKey}: {key}");
            if (context != null)
            {
                context.ChannelId = (ulong)id[0];
                context.UserId    = (ulong)id[1];
            }

            return(context);
        }
예제 #7
0
 /// <inheritdoc />
 public async Task <TaskPayload> GetTaskAsync(string ownerId, string uuid)
 {
     return(await cacheClient.HashGetAsync <TaskPayload>(
                parent.GetObjectNamespace(ownerId), uuid));
 }
 protected override async ValueTask <DiscordUserPacket> GetFromCacheAsync(params object[] id)
 {
     return(await cacheClient.HashGetAsync <DiscordUserPacket>(CacheHelpers.UsersCacheKey, id[0].ToString()));
 }
예제 #9
0
 protected override async ValueTask <DiscordGuildMemberPacket> GetFromCacheAsync(params object[] id)
 {
     return(await cacheClient.HashGetAsync <DiscordGuildMemberPacket>(
                CacheHelpers.GuildMembersKey((ulong)id[1]), id[0].ToString()));
 }
예제 #10
0
 public async Task <T> GetAsync(string key)
 => await _cacheClient.HashGetAsync <T>(_key, key);
예제 #11
0
 /// <inhericdoc />
 public async ValueTask <DiscordUserPacket> GetCurrentUserAsync()
 {
     return(await cache.HashGetAsync <DiscordUserPacket>(CacheHelpers.UsersCacheKey, "me"));
 }