internal DiscordMember(TransportMember mbr) { this.Id = mbr.User.Id; this.IsDeafened = mbr.IsDeafened; this.IsMuted = mbr.IsMuted; this.JoinedAt = mbr.JoinedAt; this.Nickname = mbr.Nickname; this._role_ids = mbr.Roles ?? new List <ulong>(); this._role_ids_lazy = new Lazy <IReadOnlyList <ulong> >(() => new ReadOnlyCollection <ulong>(this._role_ids)); }
internal DiscordMember(TransportMember mbr) : this() { Id = mbr.User.Id; IsDeafened = mbr.IsDeafened; IsMuted = mbr.IsMuted; JoinedAt = mbr.JoinedAt; Nickname = mbr.Nickname; PremiumSince = mbr.PremiumSince; _role_ids = mbr.Roles ?? new List <ulong>(); }
internal DiscordMember(TransportMember mbr) { this.Id = mbr.User.Id; this.IsDeafened = mbr.IsDeafened; this.IsMuted = mbr.IsMuted; this.JoinedAt = mbr.JoinedAt; this.Nickname = mbr.Nickname; this.PremiumSince = mbr.PremiumSince; this.IsPending = mbr.IsPending; this._avatarHash = mbr.AvatarHash; this._role_ids = mbr.Roles ?? new List <ulong>(); this._role_ids_lazy = new Lazy <IReadOnlyList <ulong> >(() => new ReadOnlyCollection <ulong>(this._role_ids)); this.CommunicationDisabledUntil = mbr.CommunicationDisabledUntil; }
private void PopulateMessageReactionsAndCache(DiscordMessage message, TransportUser author, TransportMember member) { this.UpdateMessage(message, author, message.Channel?.Guild, member); if (message._reactions == null) { message._reactions = new List <DiscordReaction>(); } foreach (var xr in message._reactions) { xr.Emoji.Discord = this; } if (this.Configuration.MessageCacheSize > 0 && message.Channel != null) { this.MessageCache?.Add(message); } }
private DiscordUser UpdateUser(DiscordUser usr, ulong?guildId, DiscordGuild guild, TransportMember mbr) { if (mbr != null) { if (mbr.User != null) { usr = new DiscordUser(mbr.User) { Discord = this }; _ = this.UserCache.AddOrUpdate(usr.Id, usr, (id, old) => { old.Username = usr.Username; old.Discriminator = usr.Discriminator; old.AvatarHash = usr.AvatarHash; return(old); }); usr = new DiscordMember(mbr) { Discord = this, _guild_id = guildId.Value }; } var intents = this.Configuration.Intents; DiscordMember member = default; if (!intents.HasAllPrivilegedIntents() || guild.IsLarge) // we have the necessary privileged intents, no need to worry about caching here unless guild is large. { if (guild?._members.TryGetValue(usr.Id, out member) == false) { if (intents.HasIntent(DiscordIntents.GuildMembers) || this.Configuration.AlwaysCacheMembers) // member can be updated by events, so cache it { guild._members.TryAdd(usr.Id, (DiscordMember)usr); } } else if (intents.HasIntent(DiscordIntents.GuildPresences) || this.Configuration.AlwaysCacheMembers) // we can attempt to update it if it's already in cache. { if (!intents.HasIntent(DiscordIntents.GuildMembers)) // no need to update if we already have the member events { _ = guild._members.TryUpdate(usr.Id, (DiscordMember)usr, member); } } } } else if (usr.Username != null) // check if not a skeleton user { _ = this.UserCache.AddOrUpdate(usr.Id, usr, (id, old) => { old.Username = usr.Username; old.Discriminator = usr.Discriminator; old.AvatarHash = usr.AvatarHash; return(old); }); } return(usr); }
private void UpdateMessage(DiscordMessage message, TransportUser author, DiscordGuild guild, TransportMember member) { if (author != null) { var usr = new DiscordUser(author) { Discord = this }; if (member != null) { member.User = author; } message.Author = this.UpdateUser(usr, guild?.Id, guild, member); } var channel = this.InternalGetCachedChannel(message.ChannelId); if (channel != null) { return; } if (!message.GuildId.HasValue) { channel = new DiscordDmChannel { Id = message.ChannelId, Discord = this, Type = ChannelType.Private }; } else { channel = new DiscordChannel { Id = message.ChannelId, Discord = this }; } message.Channel = channel; }
private void UpdateMessage(DiscordMessage message, TransportUser author, DiscordGuild guild, TransportMember member) { if (author != null) { var usr = new DiscordUser(author) { Discord = this }; if (member != null) { member.User = author; } message.Author = this.UpdateUser(usr, guild?.Id, guild, member); } }