예제 #1
0
 public async Task <ContextObject> CreateFromUserChannelAsync(IDiscordUser user, IDiscordChannel channel)
 {
     // TODO : Resolve this in a better way.
     DiscordMessage message = new DiscordMessage(
         new DiscordMessagePacket
     {
         Author = new DiscordUserPacket
         {
             Avatar        = user.AvatarId,
             Discriminator = user.Discriminator,
             Id            = user.Id,
             Username      = user.Username,
             IsBot         = user.IsBot
         },
         ChannelId = channel.Id,
         GuildId   = (channel as IDiscordGuildChannel)?.GuildId,
         Content   = "no content",
         Member    = user is IDiscordGuildUser a
                 ? new DiscordGuildMemberPacket
         {
             JoinedAt = a.JoinedAt.UtcDateTime,
             GuildId  = a.GuildId,
             Nickname = a.Nickname,
             Roles    = a.RoleIds.ToList(),
         } : null,
     },
예제 #2
0
        public async Task <DiscordUserPacket> GetUserAsync(ulong userId)
        {
            string            key    = $"discord:user:{userId}";
            DiscordUserPacket packet = null;
            var cacheClient          = cache.Get;

            {
                if (await cacheClient.ExistsAsync(key))
                {
                    packet = await cacheClient.GetAsync <DiscordUserPacket>(key);

                    if (packet == null)
                    {
                        Log.Debug($"cache hit on '{key}', but object was invalid");
                        await cacheClient.RemoveAsync(key);

                        packet = await GetUserAsync(userId);
                    }
                }
                else
                {
                    RestResponse <DiscordUserPacket> rc = await RestClient
                                                          .GetAsync <DiscordUserPacket>($"/users/{userId}");

                    await cacheClient.UpsertAsync(key, rc.Data);

                    packet = rc.Data;
                }
            }
            return(packet);
        }
예제 #3
0
        private async Task OnGuildMemberRemove(ulong guildId, DiscordUserPacket arg2)
        {
            DiscordGuildPacket guild = await _discordClient.GetGuildAsync(guildId);

            if (guild == null)
            {
                Log.Error($"Guild '{guildId}' not found");
                return;
            }

            if (guild.Members == null)
            {
                guild.Members = new List <DiscordGuildMemberPacket>();
            }
            else
            {
                int index = guild.Members.FindIndex(x => x.UserId == arg2.Id);

                if (index != -1)
                {
                    guild.Members.RemoveAt(index);
                }
            }

            await _cacheClient.RemoveAsync($"discord:guild:{guildId}:user:{arg2.Id}");

            await _cacheClient.AddAsync($"discord:guild:{guildId}", guild);
        }
예제 #4
0
 public User()
 {
     user = new DiscordUserPacket()
     {
         Id            = 111,
         Discriminator = 1234
     };
 }
예제 #5
0
 public static string GetAvatarUrl(DiscordUserPacket packet, ImageType type = ImageType.AUTO, ImageSize size = ImageSize.x256)
 {
     if (packet.Avatar != null)
     {
         return(GetAvatarUrl(packet.Id, packet.Avatar, type, size));
     }
     return(GetAvatarUrl(ushort.Parse(packet.Discriminator)));
 }
예제 #6
0
        private async Task OnGuildMemberRemove(ulong guildId, DiscordUserPacket arg2)
        {
            try
            {
                DiscordGuildPacket guild = await _discordClient.GetGuildAsync(guildId);

                if (guild == null)
                {
                    Log.Error($"Guild '{guildId}' not found");
                    return;
                }

                if (guild.Members == null)
                {
                    guild.Members = new List <DiscordGuildMemberPacket>();
                }
                else
                {
                    int index = guild.Members.FindIndex(x => x.UserId == arg2.Id);

                    if (index != -1)
                    {
                        guild.Members.RemoveAt(index);
                    }
                }

                var cache = _cacheClient.Get;

                await cache.RemoveAsync($"discord:guild:{guildId}:user:{arg2.Id}");

                await cache.UpsertAsync($"discord:guild:{guildId}", guild);
            }
            catch (Exception e)
            {
                Log.Trace(e.ToString());
            }
        }
예제 #7
0
 /// <inheritdoc />
 public DiscordSelfUser(DiscordUserPacket user, IDiscordClient client)
     : base(user, client)
 {
 }
예제 #8
0
 private async Task OnGuildBanAdd(ulong arg1, DiscordUserPacket arg2)
 {
 }
예제 #9
0
 private async Task OnUserUpdate(DiscordUserPacket arg)
 {
     await _cacheClient.AddAsync($"discord:user:{arg.Id}", arg);
 }
예제 #10
0
 public DiscordUser(DiscordUserPacket packet, IDiscordClient client)
 {
     Client = client;
     _user  = packet;
 }
예제 #11
0
        private async Task OnUserUpdate(DiscordUserPacket arg)
        {
            var cache = _cacheClient.Get;

            await cache.UpsertAsync($"discord:user:{arg.Id}", arg);
        }
예제 #12
0
 public DiscordUser(DiscordUserPacket packet, IDiscordClient client)
 {
     this.client = client;
     user        = packet;
 }
예제 #13
0
 private async Task OnUserUpdate(DiscordUserPacket user)
 {
     await cacheHandler.Users.EditAsync(user);
 }
예제 #14
0
 /// <inheritdoc />
 public async ValueTask SetCurrentUserAsync(DiscordUserPacket packet)
 {
     await cache.HashUpsertAsync(CacheHelpers.UsersCacheKey, "me", packet);
 }
예제 #15
0
 private static bool ValidateCache(DiscordUserPacket p) => !string.IsNullOrEmpty(p.Username);