public async Task GetGuildUsersAsync() { string response = ""; // Implementation via Guild.Users // foreach (var x in Context.Guild.Users) { response += (x.Username + " "); }; //Implementation via REST Client directly //RestGuild guildRest = await _clientRest.GetGuildAsync(Context.Guild.Id); //await guildRest.GetUsersAsync().ForEachAsync(x => //{ // foreach (IGuildUser y in x) { Console.Write("{name} ", y.Username); }; //}); // Implementation via Websocket method that uses REST API await Context.Guild.GetUsersAsync().ForEachAsync(x => { foreach (IGuildUser y in x) { response += y.Username + " "; } ; }); // Sending response via REST for test purposes RestGuild guildRest = await _clientRest.GetGuildAsync(Context.Guild.Id); RestTextChannel channelRest = await guildRest.GetTextChannelAsync(Context.Channel.Id); await channelRest.SendMessageAsync(response); // Sending response via WebSocket // await ReplyAsync(response); }
public DiscordAnnouncer(DiscordRestClient discordClient, ulong guildId, ulong purgeLogChannelId, string warningText) { _warningText = warningText; _guild = discordClient.GetGuildAsync(guildId).Result; _purgeChannel = _guild.GetTextChannelAsync(purgeLogChannelId).Result; _userDict = _guild.GetUsersAsync().FlattenAsync().Result.ToDictionary(u => u.Id, u => u); }
public async Task SendMessage(string message) { RestGuild guild = (RestGuild)await _client.GetGuildAsync(225374061386006528); RestTextChannel channel = await guild.GetTextChannelAsync(718854497245462588); await channel.SendMessageAsync(message); }
public async Task StreamOnline(List <TwitchUser> userList, StreamStatus streamStatus) { foreach (TwitchUser t in userList) { //Really iterating over servers here. Task <Server> getServerTask = _context.ServerList.AsQueryable().FirstAsync(s => s.ServerId == t.ServerId); RestGuild guild = (RestGuild)await _client.GetGuildAsync(ulong.Parse(t.ServerId)); Task <RestGuildUser> getUserTask = null; if (!string.IsNullOrEmpty(t.DiscordUserId)) { //We don't need this yet so we'll do this later. getUserTask = guild.GetUserAsync(ulong.Parse(t.DiscordUserId)); } Server server = await getServerTask; string twitchChannelId = server.TwitchChannel; RestGuildUser user = null; if (getUserTask != null) { user = await getUserTask; } if (user != null && !string.IsNullOrEmpty(server?.TwitchLiveRoleId)) { //We need to update the role IRole twitchLiveRole = guild.GetRole(ulong.Parse(server.TwitchLiveRoleId)); await user.AddRoleAsync(twitchLiveRole); } if (!string.IsNullOrEmpty(twitchChannelId)) { //We post updates to the channel, so now we need to see if we've already posted. string streamUrl = "https://twitch.tv/" + t.ChannelName; DateTimeOffset streamStartedUTC = streamStatus.started_at; RestTextChannel channel = await guild.GetTextChannelAsync(ulong.Parse(twitchChannelId)); //Find whether or not we've selected a message ulong lastMessageId = 0; bool sendMessage = true; while (true) { IAsyncEnumerable <IReadOnlyCollection <RestMessage> > messagesUnflattened = lastMessageId == 0 ? channel.GetMessagesAsync(100) : channel.GetMessagesAsync(lastMessageId, Direction.Before, 100); List <RestMessage> messages = (await messagesUnflattened.FlattenAsync()).ToList(); var myMessages = messages.Where(m => m.Author.Id == _client.CurrentUser.Id && m.Timestamp > streamStartedUTC && m.Content.Contains(streamUrl)).ToList(); if (myMessages.Any()) { //Already sent message. We don't need to send it again sendMessage = false; break; } else { if (messages.Last().Timestamp < streamStartedUTC) { //We're past when the stream started break; } } lastMessageId = messages.Last().Id; } if (sendMessage) { //We still need to send the message string stringToSend = ""; if (user != null && String.IsNullOrEmpty(user?.Nickname)) { stringToSend += !String.IsNullOrEmpty(user.Nickname) ? user.Nickname : user.Username; } else { stringToSend += t.ChannelName; } stringToSend += " is now live at " + streamUrl; await channel.SendMessageAsync(stringToSend); } } } }