/// <summary> /// Gets a list of messages from a channel /// </summary> /// <param name="channelId">ID of the channel</param> /// <param name="filters">Options for filtering out messages</param> public static IReadOnlyList <DiscordMessage> GetChannelMessages(this DiscordClient client, ulong channelId, MessageFilters filters = null) { if (filters == null) { filters = new MessageFilters(); } string parameters = ""; if (filters.LimitProperty.Set) { parameters += $"limit={filters.Limit}&"; } if (filters.BeforeProperty.Set) { parameters += $"before={filters.BeforeId}&"; } if (filters.AfterProperty.Set) { parameters += $"after={filters.AfterId}&"; } IReadOnlyList <DiscordMessage> messages = client.HttpClient.Get($"/channels/{channelId}/messages?{parameters}") .Deserialize <IReadOnlyList <DiscordMessage> >().SetClientsInList(client); if (filters.UserProperty.Set) { messages = messages.Where(msg => msg.Author.User.Id == filters.UserId).ToList(); } return(messages); }
/// <summary> /// Gets a list of messages from a channel. /// The list is ordered first -> last. /// </summary> /// <param name="channelId">ID of the channel</param> /// <param name="filters">Options for filtering out messages</param> public static async Task <IReadOnlyList <DiscordMessage> > GetChannelMessagesAsync(this DiscordClient client, ulong channelId, MessageFilters filters = null) { if (filters == null) { filters = new MessageFilters(); } const int messagesPerRequest = 100; List <DiscordMessage> messages = new List <DiscordMessage>(); while (true) { string parameters = ""; if (filters.Limit.HasValue) { parameters += $"limit={(uint)Math.Min(messagesPerRequest, filters.Limit.Value - messages.Count)}&"; } else { parameters += $"limit={messagesPerRequest}&"; } if (filters.BeforeId.HasValue) { parameters += $"before={filters.BeforeId.Value}&"; } if (filters.AfterId.HasValue) { parameters += $"after={filters.AfterId.Value}&"; } if (filters.AuthorId.HasValue) { parameters += $"author_id={filters.AuthorId}&"; } if (filters.MentioningUserId.HasValue) { parameters += $"mentions={filters.MentioningUserId}&"; } if (filters.Has.HasValue) { parameters += $"has={filters.Has.ToString().ToLower()}"; } var newMessages = (await client.HttpClient.GetAsync($"/channels/{channelId}/messages?{parameters}")) .Deserialize <IReadOnlyList <DiscordMessage> >().SetClientsInList(client); messages.AddRange(newMessages); filters.BeforeId = messages.Last().Id; if (newMessages.Count < messagesPerRequest) { break; } } return(messages); }
/// <summary> /// Gets a list of messages from a channel. /// The list is ordered first -> last. /// </summary> /// <param name="channelId">ID of the channel</param> /// <param name="filters">Options for filtering out messages</param> public static IReadOnlyList <DiscordMessage> GetChannelMessages(this DiscordClient client, ulong channelId, MessageFilters filters = null) { if (filters == null) { filters = new MessageFilters(); } const int messagesPerRequest = 100; List <DiscordMessage> messages = new List <DiscordMessage>(); while (true) { string parameters = ""; if (filters.Limit.HasValue) { parameters += $"limit={(uint)Math.Min(messagesPerRequest, filters.Limit.Value - messages.Count)}"; } if (filters.BeforeId.HasValue) { parameters += $"before={filters.BeforeId.Value}&"; } if (filters.AfterId.HasValue) { parameters += $"after={filters.AfterId.Value}&"; } var newMessages = client.HttpClient.Get($"/channels/{channelId}/messages?{parameters}") .Deserialize <IReadOnlyList <DiscordMessage> >().SetClientsInList(client); messages.AddRange(newMessages); filters.BeforeId = messages.Last().Id; if (newMessages.Count < messagesPerRequest) { break; } } return(messages); }
/// <summary> /// Gets a list of messages from a channel /// </summary> /// <param name="channelId">ID of the channel</param> /// <param name="filters">Options for filtering out messages</param> public static IReadOnlyList <Message> GetChannelMessages(this DiscordClient client, ulong channelId, MessageFilters filters = null) { if (filters == null) { filters = new MessageFilters(); } string parameters = ""; if (filters.LimitProperty.Set) { parameters += $"limit={filters.Limit}&"; } if (filters.BeforeProperty.Set) { parameters += $"before={filters.BeforeId}&"; } if (filters.AfterProperty.Set) { parameters += $"after={filters.AfterId}"; } IReadOnlyList <Message> messages = client.HttpClient.Get($"/channels/{channelId}/messages?{parameters}") .Deserialize <IReadOnlyList <Message> >().SetClientsInList(client); if (filters.UserProperty.Set) { List <Message> temp = new List <Message>(); foreach (var msg in messages) { if (msg.Author.User.Id == filters.UserId) { temp.Add(msg); } } messages = temp; } return(messages); }
/// <summary> /// Gets a list of messages from the channel /// </summary> /// <param name="filters">Options for filtering out messages</param> public IReadOnlyList <DiscordMessage> GetMessages(MessageFilters filters = null) { return(Client.GetChannelMessages(Id, filters)); }
/// <summary> /// Gets a list of messages from the channel /// </summary> /// <param name="filters">Options for filtering out messages</param> public IReadOnlyList <DiscordMessage> GetMessages(MessageFilters filters = null) { return(GetMessagesAsync(filters).GetAwaiter().GetResult()); }
public async Task <IReadOnlyList <DiscordMessage> > GetMessagesAsync(MessageFilters filters = null) { return(await Client.GetChannelMessagesAsync(Id, filters)); }
public static IReadOnlyList <DiscordMessage> GetChannelMessages(this DiscordClient client, ulong channelId, MessageFilters filters = null) { return(client.GetChannelMessagesAsync(channelId, filters).GetAwaiter().GetResult()); }