Exemplo n.º 1
0
        /// <summary>
        /// Gets messages from a text channel.
        /// <para>Requires <see cref="DiscordPermission.ReadMessages"/>.</para>
        /// </summary>
        /// <exception cref="DiscordHttpApiException"></exception>
        public async Task <IReadOnlyList <DiscordMessage> > GetChannelMessages(Snowflake channelId,
                                                                               Snowflake?baseMessageId        = null, int?limit = null,
                                                                               MessageGetStrategy getStrategy = MessageGetStrategy.Before)
        {
            UrlParametersBuilder builder = new UrlParametersBuilder();

            if (baseMessageId.HasValue)
            {
                builder.Add(getStrategy.ToString().ToLower(), baseMessageId.Value.ToString());
            }
            if (limit.HasValue)
            {
                builder.Add("limit", limit.Value.ToString());
            }

            DiscordApiData data = await rest.Get($"channels/{channelId}/messages{builder.ToQueryString()}",
                                                 $"channels/{channelId}/messages").ConfigureAwait(false);

            DiscordMessage[] messages = new DiscordMessage[data.Values.Count];

            for (int i = 0; i < messages.Length; i++)
            {
                messages[i] = new DiscordMessage(this, data.Values[i]);
            }

            return(messages);
        }
        /// <summary>
        /// Gets a list of user guilds the current bot is in.
        /// </summary>
        /// <exception cref="DiscordHttpApiException"></exception>
        public async Task <DiscordUserGuild[]> GetCurrentUserGuilds(int?limit             = null,
                                                                    Snowflake?baseGuildId = null, GuildGetStrategy getStrategy = GuildGetStrategy.After)
        {
            UrlParametersBuilder paramBuilder = new UrlParametersBuilder();

            if (baseGuildId.HasValue)
            {
                paramBuilder.Add(getStrategy.ToString().ToLower(), baseGuildId.ToString());
            }

            if (limit.HasValue)
            {
                paramBuilder.Add("limit", limit.Value.ToString());
            }

            DiscordApiData data = await rest.Get($"users/@me/guilds{paramBuilder.ToQueryString()}",
                                                 "users/@me/guilds").ConfigureAwait(false);

            DiscordUserGuild[] guilds = new DiscordUserGuild[data.Values.Count];

            for (int i = 0; i < guilds.Length; i++)
            {
                guilds[i] = new DiscordUserGuild(data.Values[i]);
            }

            return(guilds);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Gets a paginated list of users who reacted to the specified message with the specified emoji.
        /// </summary>
        /// <param name="baseUserId">The user ID to start at when retrieving reactions.</param>
        /// <param name="limit">The maximum number of reactions to return or null to use the default.</param>
        /// <param name="getStrategy">The pagination strategy to use based on <paramref name="baseUserId"/>.</param>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="DiscordHttpApiException"></exception>
        public async Task <IReadOnlyList <DiscordUser> > GetReactions(Snowflake channelId, Snowflake messageId,
                                                                      DiscordReactionEmoji emoji, Snowflake?baseUserId = null, int?limit = null,
                                                                      ReactionGetStrategy getStrategy = ReactionGetStrategy.Before)
        {
            if (emoji == null)
            {
                throw new ArgumentNullException(nameof(emoji));
            }

            UrlParametersBuilder builder = new UrlParametersBuilder();

            if (baseUserId.HasValue)
            {
                builder.Add(getStrategy.ToString().ToLower(), baseUserId.Value.ToString());
            }
            if (limit.HasValue)
            {
                builder.Add("limit", limit.Value.ToString());
            }

            DiscordApiData data = await rest.Get(
                $"channels/{channelId}/messages/{messageId}/reactions/{emoji}{builder.ToQueryString()}",
                $"channels/{channelId}/messages/message/reactions/emoji").ConfigureAwait(false);

            DiscordUser[] users = new DiscordUser[data.Values.Count];
            for (int i = 0; i < users.Length; i++)
            {
                users[i] = new DiscordUser(false, data.Values[i]);
            }

            return(users);
        }