public List <GuildUser> GetGuildUsers(ulong guildId) { SocketGuild guild = DiscordService.DiscordClient.GetGuild(guildId); if (guild == null) { throw new Exception("Unable to access guild"); } // Get the guild users IReadOnlyCollection <Discord.IGuildUser> guildUsers = guild.GetUsersAsync().ToEnumerable().FirstOrDefault(); // Get database users List <User> users = UserService.GetAllUsersForGuild(guildId).Result; List <GuildUser> results = new List <GuildUser>(); foreach (User guildUser in users) { string username = "******"; Discord.IGuildUser user = guildUsers.FirstOrDefault(x => x.Id == guildUser.DiscordUserId); if (user != null) { username = user.Nickname ?? user.Username; } results.Add(new GuildUser(guildUser.DiscordUserId, username, guildUser.TotalKupoNutsCurrent, guildUser.TotalXPCurrent, guildUser.Level, guildUser.Reputation)); } return(results); }
protected async Task <KeyValuePair <bool, Dictionary <string, string> > > ListMembers(string givenserverid) { DiscordSocketClient Discord = bot.getDiscordClient(); if (ulong.TryParse(givenserverid, out ulong serverid) == false) { return(new KeyValuePair <bool, Dictionary <string, string> >(false, new Dictionary <string, string>())); } SocketGuild server = Discord.GetGuild(serverid); IEnumerable <IGuildUser> users = await server.GetUsersAsync().FlattenAsync().ConfigureAwait(true); Dictionary <string, string> membersList = new Dictionary <string, string>(); foreach (IGuildUser user in users) { if (user.Nickname != null) { membersList.Add(user.Id.ToString(), user.Nickname + "|" + user.Username); } else { membersList.Add(user.Id.ToString(), user.Username); } } return(new KeyValuePair <bool, Dictionary <string, string> >(true, membersList)); }
protected async Task <bool> MessageMember(string givenserverid, string givenmemberid, string givenmessage) { DiscordSocketClient Discord = bot.getDiscordClient(); if (ulong.TryParse(givenserverid, out ulong serverid) == false) { return(false); } if (ulong.TryParse(givenmemberid, out ulong memberid) == false) { return(false); } try { SocketGuild server = Discord.GetGuild(serverid); IEnumerable <IGuildUser> users = await server.GetUsersAsync().FlattenAsync().ConfigureAwait(true); bool sent = false; foreach (IGuildUser user in users) { if (user.Id == memberid) { sent = true; await user.SendMessageAsync(givenmessage); break; } } return(sent); } catch { return(false); } }
private async Task RoleRestore(SocketGuild guild) { _logger.LogInformation("RoleRestore"); var members = (await guild.GetUsersAsync().ToListAsync()).SelectMany(e => e).ToDictionary(k => k.Id); var roles = EmojiRolePairs .Select(s => new { Key = guild.Emotes.First(e => e.Id == s.EmojiId) !, Value = guild.GetRole(s.RoleId) })
public async Task <(IReadOnlyDictionary <ulong, int> Data, DateTimeOffset?WhenCached)> GetOrFillAsync(SocketGuild guild, TimeSpan maxAge, Func <double, Task> onProgress = null) { if (maxAge < TimeSpan.Zero) { throw new ArgumentException("Can't be negative", nameof(maxAge)); } using (await _lock.ClaimAsync()) { if (_data != null && _updated + maxAge > DateTimeOffset.UtcNow && _boundGuildId == guild.Id) { return(_data, _updated); } _data = new Dictionary <ulong, int>(); _updated = DateTimeOffset.UtcNow; _boundGuildId = guild.Id; foreach (var role in guild.Roles.Select(x => x.Id)) { _data[role] = 0; } if (onProgress != null) { await onProgress(0); } var processed = 0; var batches = 0; await foreach (var batch in guild.GetUsersAsync()) { _logger.LogInformation("Fetched {Count} users", batch.Count); foreach (var user in batch) { foreach (var role in user.RoleIds) { if (_data.TryGetValue(role, out var value)) { _data[role] = value + 1; } // No else to track only existing roles (sometimes Discord is stupid and keeps deleted roles on users) } } processed += batch.Count; batches++; if (onProgress != null && batches % 3 == 0) { await onProgress((double)processed / guild.MemberCount); } } return(_data, null); } }