示例#1
0
        /// <inheritdoc/>
        public async Task <int?> PruneGuildMembersAsync(
            ulong guildId,
            int days,
            bool computePruneCount = false)
        {
            if (days <= 0)
            {
                throw new InvalidOperationException(
                          $"Parameter '{nameof(days)}' cannot be lower than 1.");
            }

            QueryString qs = new QueryString();

            qs.Add("days", days);
            qs.Add("compute_prune_count", computePruneCount);

            var response = await httpClient.PostAsync(
                DiscordApiRoutes.GuildPrune(
                    guildId) + qs.Query)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            if (computePruneCount)
            {
                return(JsonSerializer.Deserialize <DiscordPruneObject>(response.Body, options).Pruned);
            }

            return(null);
        }
示例#2
0
        /// <inheritdoc/>
        public async Task DeleteGuildAsync(
            ulong guildId)
        {
            var response = await httpClient.DeleteAsync(DiscordApiRoutes.Guild(guildId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#3
0
        /// <inheritdoc/>
        public async Task TriggerTypingAsync(ulong channelId)
        {
            var response = await httpClient.PostAsync(
                DiscordApiRoutes.ChannelTyping(channelId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#4
0
        /// <inheritdoc/>
        public async Task AddGuildMemberRoleAsync(ulong guildId, ulong userId, ulong roleId)
        {
            var response = await httpClient.PutAsync(
                DiscordApiRoutes.GuildMemberRole(guildId, userId, roleId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#5
0
        /// <inheritdoc/>
        public async Task <IEnumerable <DiscordChannelPacket> > GetDMChannelsAsync()
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.UserMeChannels())
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <List <DiscordChannelPacket> >(response.Body, options));
        }
示例#6
0
        /// <inheritdoc/>
        public async Task <GatewayConnectionPacket> GetGatewayBotAsync()
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.BotGateway())
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <GatewayConnectionPacket>(response.Body, options));
        }
示例#7
0
        /// <inheritdoc/>
        public async Task <DiscordUserPacket> GetUserAsync(ulong userId)
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.User(userId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordUserPacket>(response.Body, options));
        }
示例#8
0
        /// <inheritdoc/>
        public async Task DeleteChannelAsync(
            ulong channelId)
        {
            var response = await httpClient.DeleteAsync(
                DiscordApiRoutes.Channel(channelId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#9
0
        /// <inheritdoc/>
        public async Task DeleteReactionsAsync(
            ulong channelId,
            ulong messageId)
        {
            var response = await httpClient.DeleteAsync(
                DiscordApiRoutes.MessageReactions(channelId, messageId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#10
0
        /// <inheritdoc/>
        public async Task <DiscordEmoji[]> GetEmojisAsync(
            ulong guildId)
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.GuildEmoji(guildId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordEmoji[]>(response.Body, options));
        }
示例#11
0
        /// <inheritdoc/>
        public async Task <DiscordChannelPacket> CreateDMChannelAsync(ulong userId)
        {
            var response = await httpClient.PostAsync(
                DiscordApiRoutes.UserMeChannels(),
                $"{{\"recipient_id\":{userId}}}")
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordChannelPacket>(response.Body, options));
        }
示例#12
0
        /// <inheritdoc/>
        public async Task <IEnumerable <DiscordRolePacket> > GetRolesAsync(
            ulong guildId)
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.GuildRoles(guildId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <List <DiscordRolePacket> >(response.Body, options));
        }
示例#13
0
        /// <inheritdoc/>
        public async Task CreateReactionAsync(
            ulong channelId,
            ulong messageId,
            DiscordEmoji emoji)
        {
            var response = await httpClient.PutAsync(
                DiscordApiRoutes.MessageReactionMe(channelId, messageId, emoji))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#14
0
        /// <inheritdoc/>
        public async Task DeleteMessagesAsync(
            ulong channelId,
            params ulong[] messageId)
        {
            var response = await httpClient.PostAsync(
                DiscordApiRoutes.ChannelBulkDeleteMessages(channelId),
                JsonSerializer.Serialize(new ChannelBulkDeleteArgs(messageId), options))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#15
0
        /// <inheritdoc/>
        public async Task <DiscordMessagePacket> GetMessageAsync(
            ulong channelId,
            ulong messageId)
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.ChannelMessage(channelId, messageId))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordMessagePacket>(response.Body, options));
        }
示例#16
0
        /// <inheritdoc/>
        public async Task ModifyGuildMemberAsync(
            ulong guildId,
            ulong userId,
            ModifyGuildMemberArgs packet)
        {
            var response = await httpClient.PatchAsync(
                DiscordApiRoutes.GuildMember(guildId, userId),
                JsonSerializer.Serialize(packet, options))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#17
0
        /// <inheritdoc/>
        public async Task <DiscordRolePacket> CreateGuildRoleAsync(
            ulong guildId,
            CreateRoleArgs args)
        {
            var response = await httpClient.PostAsync(
                DiscordApiRoutes.GuildRoles(guildId),
                JsonSerializer.Serialize(args, options) ?? "")
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordRolePacket>(response.Body, options));
        }
示例#18
0
        /// <inheritdoc/>
        public async Task <DiscordRolePacket> EditRoleAsync(
            ulong guildId,
            DiscordRolePacket role)
        {
            var response = await httpClient.PutAsync(
                DiscordApiRoutes.GuildRole(guildId, role.Id),
                JsonSerializer.Serialize(role, options))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordRolePacket>(response.Body, options));
        }
示例#19
0
        /// <inheritdoc/>
        public async Task <DiscordUserPacket[]> GetReactionsAsync(
            ulong channelId,
            ulong messageId,
            DiscordEmoji emoji)
        {
            var response = await httpClient.GetAsync(
                DiscordApiRoutes.MessageReaction(channelId, messageId, emoji))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordUserPacket[]>(response.Body, options));
        }
示例#20
0
        /// <inheritdoc/>
        public async Task <DiscordEmoji> CreateEmojiAsync(
            ulong guildId,
            EmojiCreationArgs args)
        {
            var response = await httpClient.PostAsync(
                DiscordApiRoutes.GuildEmoji(guildId),
                JsonSerializer.Serialize(args, options))
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordEmoji>(response.Body, options));
        }
示例#21
0
        /// <inheritdoc/>
        public async Task <DiscordMessagePacket> SendMessageAsync(ulong channelId, MessageArgs args)
        {
            string json = JsonSerializer.Serialize(args, options);
            {
                var response = await httpClient.PostAsync(
                    DiscordApiRoutes.ChannelMessages(channelId), json)
                               .ConfigureAwait(false);

                HandleErrors(response, options);
                return(JsonSerializer.Deserialize <DiscordMessagePacket>(response.Body, options));
            }
        }
示例#22
0
        /// <inheritdoc/>
        public async Task <IEnumerable <DiscordMessagePacket> > GetMessagesAsync(
            ulong channelId,
            int amount = 100)
        {
            QueryString qs = new QueryString();

            qs.Add("limit", amount);

            var response = await httpClient.GetAsync(
                DiscordApiRoutes.ChannelMessages(channelId) + qs.Query)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordMessagePacket[]>(response.Body, options));
        }
示例#23
0
        /// <inheritdoc/>
        public async Task ModifySelfAsync(UserModifyArgs args)
        {
            if (args.Avatar.Type == ImageType.WEBP)
            {
                throw new InvalidDataException("Can't upload WEBP images.");
            }

            var json     = JsonSerializer.Serialize(args, options);
            var response = await httpClient.PatchAsync(
                DiscordApiRoutes.UserMe(),
                json)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#24
0
        /// <inheritdoc/>
        public async Task <DiscordMessagePacket> SendFileAsync(
            ulong channelId,
            Stream stream,
            string fileName,
            MessageArgs args)
        {
            if (stream == null)
            {
                throw new ArgumentNullException(nameof(stream));
            }

            args.Embed = new DiscordEmbed
            {
                Image = new EmbedImage
                {
                    Url = "attachment://" + fileName
                }
            };


            var form = new MultipartFormDataContent();

            if (!string.IsNullOrEmpty(args.Content))
            {
                form.Add(new StringContent(args.Content), "content");
            }

            if (stream.CanSeek)
            {
                var memoryStream = new MemoryStream();
                await stream.CopyToAsync(memoryStream).ConfigureAwait(false);

                memoryStream.Position = 0;
                stream = memoryStream;
            }

            form.Add(new StreamContent(stream), "file", fileName);

            var response = await httpClient.InnerClient.PostAsync(
                DiscordApiRoutes.ChannelMessages(channelId), form);

            await HandleErrorsAsync(response);

            return(JsonSerializer.Deserialize <DiscordMessagePacket>(
                       await response.Content.ReadAsStringAsync()));
        }
示例#25
0
        /// <inheritdoc/>
        public async Task RemoveGuildMemberAsync(
            ulong guildId,
            ulong userId,
            string reason = null)
        {
            QueryString qs = new QueryString();

            if (!string.IsNullOrWhiteSpace(reason))
            {
                qs.Add("reason", reason);
            }

            var response = await httpClient.DeleteAsync(
                DiscordApiRoutes.GuildMember(guildId, userId) + qs.Query)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }
示例#26
0
        /// <inheritdoc/>
        public async Task <int> GetPruneCountAsync(
            ulong guildId,
            int days)
        {
            if (days <= 0)
            {
                throw new InvalidOperationException(
                          $"Parameter '{nameof(days)}' cannot be lower than 1.");
            }

            QueryString qs = new QueryString();

            qs.Add("days", days);

            var response = await httpClient.GetAsync(
                DiscordApiRoutes.GuildPrune(guildId) + qs.Query)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
            return(JsonSerializer.Deserialize <DiscordPruneObject>(response.Body, options).Pruned);
        }
示例#27
0
        /// <inheritdoc/>
        public async Task AddGuildBanAsync(
            ulong guildId, ulong userId, int pruneDays = 7, string reason = null)
        {
            QueryString qs = new QueryString();

            if (!string.IsNullOrWhiteSpace(reason))
            {
                qs.Add("reason", reason);
            }

            if (pruneDays != 0)
            {
                qs.Add("delete-message-days", pruneDays);
            }

            var response = await httpClient.PutAsync(
                DiscordApiRoutes.GuildBan(guildId, userId) + qs.Query)
                           .ConfigureAwait(false);

            HandleErrors(response, options);
        }