Browse Source

Add emoji and guild endpoints

5.0
Paulo 3 years ago
parent
commit
ec0801d0bc
32 changed files with 2310 additions and 27 deletions
  1. +1
    -1
      src/Models/Channels/Channel.cs
  2. +10
    -0
      src/Models/Guilds/Ban.cs
  3. +30
    -0
      src/Models/Guilds/Guild.cs
  4. +6
    -1
      src/Models/Guilds/GuildMember.cs
  5. +5
    -1
      src/Models/Invites/Invite.cs
  6. +398
    -7
      src/Rest/DiscordRestClient.cs
  7. +907
    -14
      src/Rest/Net/IDiscordRestApi.cs
  8. +3
    -3
      src/Rest/Net/Requests/Channels/ModifyGroupChannelParams.cs
  9. +33
    -0
      src/Rest/Net/Requests/Emojis/CreateGuildEmojiParams.cs
  10. +28
    -0
      src/Rest/Net/Requests/Emojis/ModifyGuildEmojiParams.cs
  11. +41
    -0
      src/Rest/Net/Requests/Guilds/AddGuildMemberParams.cs
  12. +39
    -0
      src/Rest/Net/Requests/Guilds/BeginGuildPruneParams.cs
  13. +29
    -0
      src/Rest/Net/Requests/Guilds/CreateGuildBanParams.cs
  14. +83
    -0
      src/Rest/Net/Requests/Guilds/CreateGuildChannelParams.cs
  15. +75
    -0
      src/Rest/Net/Requests/Guilds/CreateGuildParams.cs
  16. +43
    -0
      src/Rest/Net/Requests/Guilds/CreateGuildRoleParams.cs
  17. +20
    -0
      src/Rest/Net/Requests/Guilds/GetGuildParams.cs
  18. +30
    -0
      src/Rest/Net/Requests/Guilds/GetGuildPruneCountParams.cs
  19. +29
    -0
      src/Rest/Net/Requests/Guilds/ListGuildMembersParams.cs
  20. +23
    -0
      src/Rest/Net/Requests/Guilds/ModifyCurrentUserNickParams.cs
  21. +32
    -0
      src/Rest/Net/Requests/Guilds/ModifyCurrentUserVoiceStateParams.cs
  22. +35
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildChannelPositionsParams.cs
  23. +43
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildMemberParams.cs
  24. +115
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildParams.cs
  25. +41
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildRoleParams.cs
  26. +25
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildRolePositionsParams.cs
  27. +32
    -0
      src/Rest/Net/Requests/Guilds/ModifyGuildWelcomeScreenParams.cs
  28. +25
    -0
      src/Rest/Net/Requests/Guilds/ModifyUserVoiceStateParams.cs
  29. +30
    -0
      src/Rest/Net/Requests/Guilds/SearchGuildMembersParams.cs
  30. +57
    -0
      src/Rest/Net/Requests/Image.cs
  31. +25
    -0
      src/Rest/Net/Requests/ImageFormat.cs
  32. +17
    -0
      src/Rest/Net/Responses/Prune.cs

+ 1
- 1
src/Models/Channels/Channel.cs View File

@@ -39,7 +39,7 @@ namespace Discord.Net.Models
/// <summary>
/// Maximum langth of a channel topic.
/// </summary>
public const int MaxRateLimitPerUserDuration = 1024;
public const int MaxRateLimitPerUserDuration = 21600;

/// <summary>
/// Minimum amount of users in channel.


+ 10
- 0
src/Models/Guilds/Ban.cs View File

@@ -11,6 +11,16 @@ namespace Discord.Net.Models
public record Ban
{
/// <summary>
/// Minimum amount of days to delete messages when banning.
/// </summary>
public const int MinDaysToDeleteMessages = 0;

/// <summary>
/// Maximum amount of days to delete messages when banning.
/// </summary>
public const int MaxDaysToDeleteMessages = 7;

/// <summary>
/// The reason for the ban.
/// </summary>
[JsonPropertyName("reason")]


+ 30
- 0
src/Models/Guilds/Guild.cs View File

@@ -12,6 +12,36 @@ namespace Discord.Net.Models
public record Guild
{
/// <summary>
/// Minimum langth of a guild name.
/// </summary>
public const int MinGuildNameLength = 2;

/// <summary>
/// Maximum langth of a guild name.
/// </summary>
public const int MaxGuildNameLength = 100;

/// <summary>
/// Minimum amount of days to prune for.
/// </summary>
public const int MinAmountOfDaysToPruneFor = 1;

/// <summary>
/// Maximum amount of days to prune for.
/// </summary>
public const int MaxAmountOfDaysToPruneFor = 30;

/// <summary>
/// Minimum limit of users to list.
/// </summary>
public const int MinUserLimitToList = 1;

/// <summary>
/// Maximum limit of users to list.
/// </summary>
public const int MaxUserLimitToList = 1000;

/// <summary>
/// <see cref="Guild"/> id.
/// </summary>
[JsonPropertyName("id")]


+ 6
- 1
src/Models/Guilds/GuildMember.cs View File

@@ -12,13 +12,18 @@ namespace Discord.Net.Models
public record GuildMember
{
/// <summary>
/// Maximum langth of a guild member nickname.
/// </summary>
public const int MaxNicknameLength = 32;

/// <summary>
/// The <see cref="Models.User"/> this <see cref="GuildMember"/> represents.
/// </summary>
[JsonPropertyName("user")]
public Optional<User> User { get; init; }

/// <summary>
/// This users <see cref="Guild"/> nickname.
/// This user's <see cref="Guild"/> nickname.
/// </summary>
[JsonPropertyName("nick")]
public Optional<string?> Nick { get; init; }


+ 5
- 1
src/Models/Invites/Invite.cs View File

@@ -14,8 +14,12 @@ namespace Discord.Net.Models
/// <summary>
/// The <see cref="Invite"/> code (unique ID).
/// </summary>
/// <remarks>
/// Might be <see langword="null"/> if it is a vanity url invite and
/// it was not set for the <see cref="Guild"/>.
/// </remarks>
[JsonPropertyName("code")]
public string? Code { get; init; } // Required property candidate
public string? Code { get; init; }

/// <summary>
/// The <see cref="Guild"/> this <see cref="Invite"/> is for.


+ 398
- 7
src/Rest/DiscordRestClient.cs View File

@@ -41,7 +41,7 @@ namespace Discord.Net
#region Channel

/// <inheritdoc/>
public Task<Channel> GetChannelAsync(Snowflake channelId, CancellationToken cancellationToken = default)
public Task<Channel?> GetChannelAsync(Snowflake channelId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
return _api.GetChannelAsync(channelId, cancellationToken);
@@ -82,7 +82,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<Message[]> GetChannelMessagesAsync(Snowflake channelId, GetChannelMessagesParams args, CancellationToken cancellationToken = default)
public Task<IEnumerable<Message>> GetChannelMessagesAsync(Snowflake channelId, GetChannelMessagesParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
Preconditions.NotNull(args, nameof(args));
@@ -91,7 +91,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<Message> GetChannelMessageAsync(Snowflake channelId, Snowflake messageId, CancellationToken cancellationToken = default)
public Task<Message?> GetChannelMessageAsync(Snowflake channelId, Snowflake messageId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
Preconditions.NotZero(messageId, nameof(messageId));
@@ -144,7 +144,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<User[]> GetReactionsAsync(Snowflake channelId, Snowflake messageId, Emoji emoji, GetReactionsParams args, CancellationToken cancellationToken = default)
public Task<IEnumerable<User>> GetReactionsAsync(Snowflake channelId, Snowflake messageId, Emoji emoji, GetReactionsParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
Preconditions.NotZero(messageId, nameof(messageId));
@@ -209,7 +209,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<InviteWithMetadata[]> GetChannelInvitesAsync(Snowflake channelId, CancellationToken cancellationToken = default)
public Task<IEnumerable<InviteWithMetadata>> GetChannelInvitesAsync(Snowflake channelId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
return _api.GetChannelInvitesAsync(channelId, cancellationToken);
@@ -249,7 +249,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<Message[]> GetPinnedMessagesAsync(Snowflake channelId, CancellationToken cancellationToken = default)
public Task<IEnumerable<Message>> GetPinnedMessagesAsync(Snowflake channelId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
return _api.GetPinnedMessagesAsync(channelId, cancellationToken);
@@ -339,7 +339,7 @@ namespace Discord.Net
}

/// <inheritdoc/>
public Task<ThreadMember[]> ListThreadMembersAsync(Snowflake channelId, CancellationToken cancellationToken = default)
public Task<IEnumerable<ThreadMember>> ListThreadMembersAsync(Snowflake channelId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(channelId, nameof(channelId));
return _api.ListThreadMembersAsync(channelId, cancellationToken);
@@ -380,5 +380,396 @@ namespace Discord.Net
}

#endregion Channel

#region Emoji

/// <inheritdoc/>
public Task<IEnumerable<Emoji>> ListGuildEmojisAsync(Snowflake guildId, Emoji emoji, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(emoji, nameof(emoji));
return _api.ListGuildEmojisAsync(guildId, emoji, cancellationToken);
}

/// <inheritdoc/>
public Task<Emoji> GetGuildEmojiAsync(Snowflake guildId, Emoji emoji, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(emoji, nameof(emoji));
return _api.GetGuildEmojiAsync(guildId, emoji, cancellationToken);
}

/// <inheritdoc/>
public Task<Emoji> CreateGuildEmojiAsync(Snowflake guildId, Emoji emoji, CreateGuildEmojiParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(emoji, nameof(emoji));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.CreateGuildEmojiAsync(guildId, emoji, args, cancellationToken);
}

/// <inheritdoc/>
public Task<Emoji> ModifyGuildEmojiAsync(Snowflake guildId, Emoji emoji, ModifyGuildEmojiParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(emoji, nameof(emoji));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyGuildEmojiAsync(guildId, emoji, args, cancellationToken);
}

/// <inheritdoc/>
public Task DeleteGuildEmojiAsync(Snowflake guildId, Emoji emoji, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(emoji, nameof(emoji));
return _api.DeleteGuildEmojiAsync(guildId, emoji, cancellationToken);
}

#endregion Emoji

#region Guild

/// <inheritdoc/>
public Task<Guild> CreateGuildAsync(CreateGuildParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.CreateGuildAsync(args, cancellationToken);
}

/// <inheritdoc/>
public Task<Guild> GetGuildAsync(Snowflake guildId, GetGuildParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.GetGuildAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<Guild?> GetGuildPreviewAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildPreviewAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<Guild> ModifyGuildAsync(Snowflake guildId, ModifyGuildParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyGuildAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task DeleteGuildAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.DeleteGuildAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<GuildChannel>> GetGuildChannelsAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildChannelsAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildChannel> CreateGuildChannelAsync(Snowflake guildId, CreateGuildChannelParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.CreateGuildChannelAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task ModifyGuildChannelPositionsAsync(Snowflake guildId, ModifyGuildChannelPositionsParams[] args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
foreach (var value in args)
{
Preconditions.NotNull(value, nameof(args));
value.Validate();
}
return _api.ModifyGuildChannelPositionsAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildMember?> GetGuildMemberAsync(Snowflake guildId, Snowflake userId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
return _api.GetGuildMemberAsync(guildId, userId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<GuildMember>> ListGuildMembersAsync(Snowflake guildId, ListGuildMembersParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ListGuildMembersAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<GuildMember>> SearchGuildMembersAsync(Snowflake guildId, SearchGuildMembersParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.SearchGuildMembersAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildMember?> AddGuildMemberAsync(Snowflake guildId, Snowflake userId, AddGuildMemberParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.AddGuildMemberAsync(guildId, userId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildMember> ModifyGuildMemberAsync(Snowflake guildId, Snowflake userId, ModifyGuildMemberParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyGuildMemberAsync(guildId, userId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<string> ModifyCurrentUserNickAsync(Snowflake guildId, ModifyCurrentUserNickParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyCurrentUserNickAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task AddGuildMemberRoleAsync(Snowflake guildId, Snowflake userId, Snowflake roleId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotZero(roleId, nameof(roleId));
return _api.AddGuildMemberRoleAsync(guildId, userId, roleId, cancellationToken);
}

/// <inheritdoc/>
public Task RemoveGuildMemberRoleAsync(Snowflake guildId, Snowflake userId, Snowflake roleId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotZero(roleId, nameof(roleId));
return _api.RemoveGuildMemberRoleAsync(guildId, userId, roleId, cancellationToken);
}

/// <inheritdoc/>
public Task RemoveGuildMemberAsync(Snowflake guildId, Snowflake userId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
return _api.RemoveGuildMemberAsync(guildId, userId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<Ban>> GetGuildBansAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildBansAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<Ban?> GetGuildBanAsync(Snowflake guildId, Snowflake userId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
return _api.GetGuildBanAsync(guildId, userId, cancellationToken);
}

/// <inheritdoc/>
public Task CreateGuildBanAsync(Snowflake guildId, Snowflake userId, CreateGuildBanParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.CreateGuildBanAsync(guildId, userId, args, cancellationToken);
}

/// <inheritdoc/>
public Task RemoveGuildBanAsync(Snowflake guildId, Snowflake userId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
return _api.RemoveGuildBanAsync(guildId, userId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<Role>> GetGuildRolesAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildRolesAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<Role> CreateGuildRoleAsync(Snowflake guildId, CreateGuildRoleParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.CreateGuildRoleAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<Role>> ModifyGuildRolePositionsAsync(Snowflake guildId, ModifyGuildRolePositionsParams[] args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
foreach (var value in args)
{
Preconditions.NotNull(value, nameof(args));
value.Validate();
}
return _api.ModifyGuildRolePositionsAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<Role> ModifyGuildRoleAsync(Snowflake guildId, Snowflake roleId, ModifyGuildRoleParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(roleId, nameof(roleId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyGuildRoleAsync(guildId, roleId, args, cancellationToken);
}

/// <inheritdoc/>
public Task DeleteGuildRoleAsync(Snowflake guildId, Snowflake roleId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(roleId, nameof(roleId));
return _api.DeleteGuildRoleAsync(guildId, roleId, cancellationToken);
}

/// <inheritdoc/>
public Task<Prune> GetGuildPruneCountAsync(Snowflake guildId, GetGuildPruneCountParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.GetGuildPruneCountAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<Prune> BeginGuildPruneAsync(Snowflake guildId, BeginGuildPruneParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.BeginGuildPruneAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<VoiceRegion>> GetGuildVoiceRegionsAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildVoiceRegionsAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<InviteWithMetadata>> GetGuildInvitesAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildInvitesAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<IEnumerable<Integration>> GetGuildIntegrationsAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildIntegrationsAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task DeleteGuildIntegrationAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.DeleteGuildIntegrationAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildWidget> GetGuildWidgetSettingsAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildWidgetSettingsAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<GuildWidget> ModifyGuildWidgetAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.ModifyGuildWidgetAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<object> GetGuildWidgetAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildWidgetAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<Invite?> GetGuildVanityURLAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildVanityURLAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<WelcomeScreen> GetGuildWelcomeScreenAsync(Snowflake guildId, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
return _api.GetGuildWelcomeScreenAsync(guildId, cancellationToken);
}

/// <inheritdoc/>
public Task<WelcomeScreen> ModifyGuildWelcomeScreenAsync(Snowflake guildId, ModifyGuildWelcomeScreenParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyGuildWelcomeScreenAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task ModifyCurrentUserVoiceStateAsync(Snowflake guildId, ModifyCurrentUserVoiceStateParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyCurrentUserVoiceStateAsync(guildId, args, cancellationToken);
}

/// <inheritdoc/>
public Task ModifyUserVoiceStateAsync(Snowflake guildId, Snowflake userId, ModifyUserVoiceStateParams args, CancellationToken cancellationToken = default)
{
Preconditions.NotZero(guildId, nameof(guildId));
Preconditions.NotZero(userId, nameof(userId));
Preconditions.NotNull(args, nameof(args));
args.Validate();
return _api.ModifyUserVoiceStateAsync(guildId, userId, args, cancellationToken);
}

#endregion Guild
}
}

+ 907
- 14
src/Rest/Net/IDiscordRestApi.cs
File diff suppressed because it is too large
View File


+ 3
- 3
src/Rest/Net/Requests/Channels/ModifyGroupChannelParams.cs View File

@@ -11,14 +11,14 @@ namespace Discord.Net.Rest
public record ModifyGroupChannelParams
{
/// <summary>
/// <see cref="Channel"/> name.
/// <see cref="GroupChannel"/> name.
/// </summary>
public Optional<string> Name { get; set; }

/// <summary>
/// Base64 encoded icon.
/// <see cref="GroupChannel"/> icon.
/// </summary>
public Optional<string> Icon { get; set; }
public Optional<Image> Icon { get; set; }

/// <summary>
/// Validates the data.


+ 33
- 0
src/Rest/Net/Requests/Emojis/CreateGuildEmojiParams.cs View File

@@ -0,0 +1,33 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record CreateGuildEmojiParams
{
/// <summary>
/// Name of the <see cref="Emoji"/>.
/// </summary>
public string? Name { get; set; } // Required property candidate

/// <summary>
/// The 128x128 <see cref="Emoji"/> image.
/// </summary>
public Image Image { get; set; }

/// <summary>
/// <see cref="Role"/>s allowed to use this <see cref="Emoji"/>.
/// </summary>
public Snowflake[]? Roles { get; set; } // Required property candidate

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNullOrWhitespace(Name, nameof(Name));
}
}
}

+ 28
- 0
src/Rest/Net/Requests/Emojis/ModifyGuildEmojiParams.cs View File

@@ -0,0 +1,28 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildEmojiParams
{
/// <summary>
/// Name of the <see cref="Emoji"/>.
/// </summary>
public Optional<string> Name { get; set; }

/// <summary>
/// <see cref="Role"/>s allowed to use this <see cref="Emoji"/>.
/// </summary>
public Optional<Snowflake[]?> Roles { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNullOrWhitespace(Name!, nameof(Name));
}
}
}

+ 41
- 0
src/Rest/Net/Requests/Guilds/AddGuildMemberParams.cs View File

@@ -0,0 +1,41 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record AddGuildMemberParams
{
/// <summary>
/// An oauth2 access token granted with the guilds.join to the bot's application for the user you want to add to the guild.
/// </summary>
public string? AccessToken { get; set; } // Required property candidate

/// <summary>
/// Value to set users nickname to.
/// </summary>
public Optional<string> Nick { get; set; }

/// <summary>
/// Array of role ids the member is assigned.
/// </summary>
public Optional<Snowflake[]> Roles { get; set; }

/// <summary>
/// Whether the user is muted in voice channels.
/// </summary>
public Optional<bool> Mute { get; set; }

/// <summary>
/// Whether the user is deafened in voice channels.
/// </summary>
public Optional<bool> Deaf { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNullOrEmpty(AccessToken, nameof(AccessToken));
}
}
}

+ 39
- 0
src/Rest/Net/Requests/Guilds/BeginGuildPruneParams.cs View File

@@ -0,0 +1,39 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record BeginGuildPruneParams
{
/// <summary>
/// Number of days to prune (1-30).
/// </summary>
public Optional<int> Days { get; set; }

/// <summary>
/// Whether 'pruned' is returned, discouraged for large guilds.
/// </summary>
public Optional<bool> ComputePruneCount { get; set; }

/// <summary>
/// Role(s) to include, by id.
/// </summary>
public Optional<Snowflake[]> IncludeRoles { get; set; }

/// <summary>
/// Reason for the prune.
/// </summary>
public Optional<string> Reason { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.AtLeast(Days, Guild.MinAmountOfDaysToPruneFor, nameof(Days));
Preconditions.AtMost(Days, Guild.MaxAmountOfDaysToPruneFor, nameof(Days));
}
}
}

+ 29
- 0
src/Rest/Net/Requests/Guilds/CreateGuildBanParams.cs View File

@@ -0,0 +1,29 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record CreateGuildBanParams
{
/// <summary>
/// Number of days to delete messages for (0-7).
/// </summary>
public Optional<int> DeleteMessageDays { get; set; }

/// <summary>
/// Reason for the ban.
/// </summary>
public Optional<string> Reason { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.AtLeast(DeleteMessageDays, Ban.MinDaysToDeleteMessages, nameof(DeleteMessageDays));
Preconditions.AtMost(DeleteMessageDays, Ban.MaxDaysToDeleteMessages, nameof(DeleteMessageDays));
}
}
}

+ 83
- 0
src/Rest/Net/Requests/Guilds/CreateGuildChannelParams.cs View File

@@ -0,0 +1,83 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record CreateGuildChannelParams
{
/// <summary>
/// Channel name (1-100 characters).
/// </summary>
public string? Name { get; set; } // Required property candidate

/// <summary>
/// The type of channel.
/// </summary>
public Optional<ChannelType> Type { get; set; }

/// <summary>
/// Channel topic (0-1024 characters).
/// </summary>
public Optional<string> Topic { get; set; }

/// <summary>
/// The bitrate (in bits) of the voice channel (voice only).
/// </summary>
public Optional<int> Bitrate { get; set; }

/// <summary>
/// The user limit of the voice channel (voice only).
/// </summary>
public Optional<int> UserLimit { get; set; }

/// <summary>
/// Amount of seconds a user has to wait before sending another message (0-21600);
/// bots, as well as users with the permission <see cref="Permissions.ManageMessages"/> or
/// <see cref="Permissions.ManageChannels"/>, are unaffected.
/// </summary>
public Optional<int> RateLimitPerUser { get; set; }

/// <summary>
/// Sorting position of the channel.
/// </summary>
public Optional<int> Position { get; set; }

/// <summary>
/// The channel's permission overwrites.
/// </summary>
public Optional<Overwrite[]> PermissionOverwrites { get; set; }

/// <summary>
/// Id of the parent category for a channel.
/// </summary>
public Optional<Snowflake> ParentId { get; set; }

/// <summary>
/// Whether the channel is nsfw.
/// </summary>
public Optional<bool> Nsfw { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNull(Name, nameof(Name));
Preconditions.LengthAtLeast(Name, Channel.MinChannelNameLength, nameof(Name));
Preconditions.LengthAtMost(Name, Channel.MaxChannelNameLength, nameof(Name));
Preconditions.NotNegative(Position, nameof(Position));
Preconditions.NotNull(Topic!, nameof(Topic));
Preconditions.LengthAtLeast(Topic!, Channel.MinChannelTopicLength, nameof(Topic));
Preconditions.LengthAtMost(Topic!, Channel.MaxChannelTopicLength, nameof(Topic));
Preconditions.AtLeast(RateLimitPerUser, Channel.MinRateLimitPerUserDuration, nameof(RateLimitPerUser));
Preconditions.AtMost(RateLimitPerUser, Channel.MaxRateLimitPerUserDuration, nameof(RateLimitPerUser));
Preconditions.AtLeast(Bitrate, Channel.MinBitrate, nameof(Bitrate));
Preconditions.AtMost(Bitrate, Channel.MaxBitrate, nameof(Bitrate));
Preconditions.AtLeast(UserLimit, Channel.MinUserLimit, nameof(UserLimit));
Preconditions.AtMost(UserLimit, Channel.MaxUserLimit, nameof(UserLimit));
Preconditions.NotNull(PermissionOverwrites!, nameof(PermissionOverwrites));
}
}
}

+ 75
- 0
src/Rest/Net/Requests/Guilds/CreateGuildParams.cs View File

@@ -0,0 +1,75 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record CreateGuildParams
{
/// <summary>
/// Name of the guild (2-100 characters).
/// </summary>
public string? Name { get; set; } // Required property candidate

/// <summary>
/// Image for the guild icon.
/// </summary>
public Optional<Image> Icon { get; set; }

/// <summary>
/// Verification level.
/// </summary>
public Optional<VerificationLevel> VerificationLevel { get; set; }

/// <summary>
/// Default message notification level.
/// </summary>
public Optional<DefaultMessageNotificationLevel> DefaultMessageNotifications { get; set; }

/// <summary>
/// Explicit content filter level.
/// </summary>
public Optional<ExplicitContentFilterLevel> ExplicitContentFilter { get; set; }

/// <summary>
/// New guild roles.
/// </summary>
public Optional<Role[]> Roles { get; set; }

/// <summary>
/// New guild's channels.
/// </summary>
public Optional<Channel[]> Channels { get; set; }

/// <summary>
/// Id for afk channel.
/// </summary>
public Optional<Snowflake> AfkChannelId { get; set; }

/// <summary>
/// Afk timeout in seconds.
/// </summary>
public Optional<int> AfkTimeout { get; set; }

/// <summary>
/// The id of the channel where guild notices such as welcome messages and boost events are posted.
/// </summary>
public Optional<Snowflake> SystemChannelId { get; set; }

/// <summary>
/// System channel flags.
/// </summary>
public Optional<SystemChannelFlags> SystemChannelFlags { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNull(Name, nameof(Name));
Preconditions.LengthAtLeast(Name, Guild.MinGuildNameLength, nameof(Name));
Preconditions.LengthAtMost(Name, Guild.MaxGuildNameLength, nameof(Name));
}
}
}

+ 43
- 0
src/Rest/Net/Requests/Guilds/CreateGuildRoleParams.cs View File

@@ -0,0 +1,43 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record CreateGuildRoleParams
{
/// <summary>
/// Name of the role.
/// </summary>
public Optional<string> Name { get; set; }

/// <summary>
/// Bitwise value of the enabled/disabled permissions.
/// </summary>
public Optional<Permissions> Permissions { get; set; }

/// <summary>
/// Role color.
/// </summary>
public Optional<Color> Color { get; set; }

/// <summary>
/// Whether the role should be displayed separately in the sidebar.
/// </summary>
public Optional<bool> Hoist { get; set; }

/// <summary>
/// Whether the role should be mentionable.
/// </summary>
public Optional<bool> Mentionable { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNullOrEmpty(Name!, nameof(Name));
}
}
}

+ 20
- 0
src/Rest/Net/Requests/Guilds/GetGuildParams.cs View File

@@ -0,0 +1,20 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record GetGuildParams
{
/// <summary>
/// When true, will return approximate member and presence counts for the guild.
/// </summary>
public Optional<bool> WithCounts { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 30
- 0
src/Rest/Net/Requests/Guilds/GetGuildPruneCountParams.cs View File

@@ -0,0 +1,30 @@
using System.Collections.Generic;
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record GetGuildPruneCountParams
{
/// <summary>
/// Number of days to count prune for (1-30).
/// </summary>
public Optional<int> Days { get; set; }

/// <summary>
/// Role(s) to include, by id.
/// </summary>
public Optional<IEnumerable<Snowflake>> IncludeRoles { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.AtLeast(Days, Guild.MinAmountOfDaysToPruneFor, nameof(Days));
Preconditions.AtMost(Days, Guild.MaxAmountOfDaysToPruneFor, nameof(Days));
}
}
}

+ 29
- 0
src/Rest/Net/Requests/Guilds/ListGuildMembersParams.cs View File

@@ -0,0 +1,29 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ListGuildMembersParams
{
/// <summary>
/// Max number of members to return (1-1000).
/// </summary>
public int Limit { get; set; }

/// <summary>
/// The highest user id in the previous page.
/// </summary>
public Snowflake After { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.AtLeast(Limit, Guild.MinUserLimitToList, nameof(Limit));
Preconditions.AtMost(Limit, Guild.MaxUserLimitToList, nameof(Limit));
}
}
}

+ 23
- 0
src/Rest/Net/Requests/Guilds/ModifyCurrentUserNickParams.cs View File

@@ -0,0 +1,23 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyCurrentUserNickParams
{
/// <summary>
/// Value to set users nickname to.
/// </summary>
public Optional<string?> Nick { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.LengthAtMost(Nick, GuildMember.MaxNicknameLength, nameof(Nick));
}
}
}

+ 32
- 0
src/Rest/Net/Requests/Guilds/ModifyCurrentUserVoiceStateParams.cs View File

@@ -0,0 +1,32 @@
using System;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyCurrentUserVoiceStateParams
{
/// <summary>
/// The id of the channel the user is currently in.
/// </summary>
public Snowflake ChannelId { get; set; }

/// <summary>
/// Toggles the user's suppress state.
/// </summary>
public Optional<bool> Suppress { get; set; }

/// <summary>
/// Sets the user's request to speak.
/// </summary>
public Optional<DateTimeOffset?> RequestToSpeakTimestamp { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 35
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildChannelPositionsParams.cs View File

@@ -0,0 +1,35 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildChannelPositionsParams
{
/// <summary>
/// Channel id.
/// </summary>
public Snowflake Id { get; set; }

/// <summary>
/// Sorting position of the channel.
/// </summary>
public int? Position { get; set; }

/// <summary>
/// Syncs the permission overwrites with the new parent, if moving to a new category.
/// </summary>
public bool? LockPermissions { get; set; }

/// <summary>
/// The new parent ID for the channel that is moved.
/// </summary>
public Snowflake? ParentId { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 43
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildMemberParams.cs View File

@@ -0,0 +1,43 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildMemberParams
{
/// <summary>
/// Value to set users nickname to.
/// </summary>
public Optional<string?> Nick { get; set; }

/// <summary>
/// Array of role ids the member is assigned.
/// </summary>
public Optional<Snowflake[]?> Roles { get; set; }

/// <summary>
/// Whether the user is muted in voice channels. Will throw a 400 if the user is not in a voice channel.
/// </summary>
public Optional<bool?> Mute { get; set; }

/// <summary>
/// Whether the user is deafened in voice channels. Will throw a 400 if the user is not in a voice channel.
/// </summary>
public Optional<bool?> Deaf { get; set; }

/// <summary>
/// Id of channel to move user to (if they are connected to voice).
/// </summary>
public Optional<Snowflake?> ChannelId { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.LengthAtMost(Nick, GuildMember.MaxNicknameLength, nameof(Nick));
}
}
}

+ 115
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildParams.cs View File

@@ -0,0 +1,115 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildParams
{
/// <summary>
/// Guild name.
/// </summary>
public Optional<string> Name { get; set; }

/// <summary>
/// Guild voice region id (deprecated).
/// </summary>
public Optional<string?> Region { get; set; }

/// <summary>
/// Verification level.
/// </summary>
public Optional<int?> VerificationLevel { get; set; }

/// <summary>
/// Default message notification level.
/// </summary>
public Optional<int?> DefaultMessageNotifications { get; set; }

/// <summary>
/// Explicit content filter level.
/// </summary>
public Optional<int?> ExplicitContentFilter { get; set; }

/// <summary>
/// Id for afk channel.
/// </summary>
public Optional<Snowflake?> AfkChannelId { get; set; }

/// <summary>
/// Afk timeout in seconds.
/// </summary>
public Optional<int> AfkTimeout { get; set; }

/// <summary>
/// Image for the guild icon (can be animated gif when the server has the ANIMATED_ICON feature).
/// </summary>
public Optional<Image?> Icon { get; set; }

/// <summary>
/// User id to transfer guild ownership to (must be owner).
/// </summary>
public Optional<Snowflake> OwnerId { get; set; }

/// <summary>
/// Image for the guild splash (when the server has the INVITE_SPLASH feature).
/// </summary>
public Optional<Image?> Splash { get; set; }

/// <summary>
/// Image for the guild discovery splash (when the server has the DISCOVERABLE feature).
/// </summary>
public Optional<Image?> DiscoverySplash { get; set; }

/// <summary>
/// Image for the guild banner (when the server has the BANNER feature).
/// </summary>
public Optional<Image?> Banner { get; set; }

/// <summary>
/// The id of the channel where guild notices such as welcome messages and boost events are posted.
/// </summary>
public Optional<Snowflake?> SystemChannelId { get; set; }

/// <summary>
/// System channel flags.
/// </summary>
public Optional<int> SystemChannelFlags { get; set; }

/// <summary>
/// The id of the channel where Community guilds display rules and/or guidelines.
/// </summary>
public Optional<Snowflake?> RulesChannelId { get; set; }

/// <summary>
/// The id of the channel where admins and moderators of Community guilds receive notices from Discord.
/// </summary>
public Optional<Snowflake?> PublicUpdatesChannelId { get; set; }

/// <summary>
/// The preferred locale of a Community guild used in server discovery and notices from Discord; defaults to "en-US".
/// </summary>
public Optional<string?> PreferredLocale { get; set; }

/// <summary>
/// Enabled guild features.
/// </summary>
public Optional<string[]> Features { get; set; }

/// <summary>
/// The description for the guild, if the guild is discoverable.
/// </summary>
public Optional<string?> Description { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNull(Name!, nameof(Name));
Preconditions.LengthAtLeast(Name!, Guild.MinGuildNameLength, nameof(Name));
Preconditions.LengthAtMost(Name!, Guild.MaxGuildNameLength, nameof(Name));
}
}
}

+ 41
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildRoleParams.cs View File

@@ -0,0 +1,41 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildRoleParams
{
/// <summary>
/// Name of the role.
/// </summary>
public Optional<string?> Name { get; set; }

/// <summary>
/// Bitwise value of the enabled/disabled permissions.
/// </summary>
public Optional<string?> Permissions { get; set; }

/// <summary>
/// RGB color value.
/// </summary>
public Optional<Color?> Color { get; set; }

/// <summary>
/// Whether the role should be displayed separately in the sidebar.
/// </summary>
public Optional<bool?> Hoist { get; set; }

/// <summary>
/// Whether the role should be mentionable.
/// </summary>
public Optional<bool?> Mentionable { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNullOrEmpty(Name!, nameof(Name));
}
}
}

+ 25
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildRolePositionsParams.cs View File

@@ -0,0 +1,25 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildRolePositionsParams
{
/// <summary>
/// Role.
/// </summary>
public Snowflake Id { get; set; }

/// <summary>
/// Sorting position of the role.
/// </summary>
public Optional<int?> Position { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 32
- 0
src/Rest/Net/Requests/Guilds/ModifyGuildWelcomeScreenParams.cs View File

@@ -0,0 +1,32 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyGuildWelcomeScreenParams
{
/// <summary>
/// Whether the welcome screen is enabled.
/// </summary>
public Optional<bool?> Enabled { get; set; }

/// <summary>
/// Channels linked in the welcome screen and their display options.
/// </summary>
public Optional<WelcomeScreenChannel[]?> WelcomeChannels { get; set; }

/// <summary>
/// The server description to show in the welcome screen.
/// </summary>
public Optional<string?> Description { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 25
- 0
src/Rest/Net/Requests/Guilds/ModifyUserVoiceStateParams.cs View File

@@ -0,0 +1,25 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record ModifyUserVoiceStateParams
{
/// <summary>
/// The id of the channel the user is currently in.
/// </summary>
public Snowflake ChannelId { get; set; }

/// <summary>
/// Toggles the user's suppress state.
/// </summary>
public Optional<bool> Suppress { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
}
}
}

+ 30
- 0
src/Rest/Net/Requests/Guilds/SearchGuildMembersParams.cs View File

@@ -0,0 +1,30 @@
using Discord.Net.Models;

namespace Discord.Net.Rest
{
/// <summary>
/// Parameters to add to the request.
/// </summary>
public record SearchGuildMembersParams
{
/// <summary>
/// Query string to match username(s) and nickname(s) against.
/// </summary>
public string? Query { get; set; } // Required property candidate

/// <summary>
/// Max number of members to return (1-1000).
/// </summary>
public Optional<int> Limit { get; set; }

/// <summary>
/// Validates the data.
/// </summary>
public void Validate()
{
Preconditions.NotNull(Query, nameof(Query));
Preconditions.AtLeast(Limit, Guild.MinUserLimitToList, nameof(Limit));
Preconditions.AtMost(Limit, Guild.MaxUserLimitToList, nameof(Limit));
}
}
}

+ 57
- 0
src/Rest/Net/Requests/Image.cs View File

@@ -0,0 +1,57 @@
using System.IO;

namespace Discord.Net.Rest
{
/// <summary>
/// Container to send a base64 encoded image to Discord.
/// </summary>
/// <remarks>
/// <see href="https://discord.com/developers/docs/reference#image-data"/>
/// </remarks>
public struct Image
{
/// <summary>
/// The image stream.
/// </summary>
public Stream? Stream { get; }

/// <summary>
/// The format of the image.
/// </summary>
public ImageFormat StreamFormat { get; }

/// <summary>
/// The image hash.
/// </summary>
public string? Hash { get; }

/// <summary>
/// Creates an <see cref="Image"/> based on a <see cref="System.IO.Stream"/>.
/// </summary>
/// <param name="stream">
/// Image stream.
/// </param>
/// <param name="format">
/// Image format.
/// </param>
public Image(Stream stream, ImageFormat format)
{
Stream = stream;
StreamFormat = format;
Hash = null;
}

/// <summary>
/// Creates an <see cref="Image"/> based on the image hash.
/// </summary>
/// <param name="hash">
/// Image hash.
/// </param>
public Image(string hash)
{
Stream = null;
StreamFormat = ImageFormat.Jpeg;
Hash = hash;
}
}
}

+ 25
- 0
src/Rest/Net/Requests/ImageFormat.cs View File

@@ -0,0 +1,25 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Declares an enum which represents the format of the image.
/// </summary>
public enum ImageFormat
{
/// <summary>
/// The image format is WebP.
/// </summary>
WebP,
/// <summary>
/// The image format is Png.
/// </summary>
Png,
/// <summary>
/// The image format is Jpg/Jpeg.
/// </summary>
Jpeg,
/// <summary>
/// The image format is Gif.
/// </summary>
Gif,
}
}

+ 17
- 0
src/Rest/Net/Responses/Prune.cs View File

@@ -0,0 +1,17 @@
namespace Discord.Net.Rest
{
/// <summary>
/// Response to count or begin a prune.
/// </summary>
/// <remarks>
/// <see href="https://discord.com/developers/docs/resources/guild#get-guild-prune-count"/> or
/// <see href="https://discord.com/developers/docs/resources/guild#begin-guild-prune"/>
/// </remarks>
public record Prune
{
/// <summary>
/// Gets the number of members that would or were affected in a prune operation.
/// </summary>
public Optional<int> Pruned { get; init; }
}
}

Loading…
Cancel
Save