コード例 #1
0
ファイル: Extensions.cs プロジェクト: LegendModzYT/Anarchy
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
ファイル: Extensions.cs プロジェクト: xuan2261/Anarchy
        /// <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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
 /// <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));
 }
コード例 #6
0
 /// <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());
 }
コード例 #7
0
 public async Task <IReadOnlyList <DiscordMessage> > GetMessagesAsync(MessageFilters filters = null)
 {
     return(await Client.GetChannelMessagesAsync(Id, filters));
 }
コード例 #8
0
 public static IReadOnlyList <DiscordMessage> GetChannelMessages(this DiscordClient client, ulong channelId, MessageFilters filters = null)
 {
     return(client.GetChannelMessagesAsync(channelId, filters).GetAwaiter().GetResult());
 }