Browse Source

Some fixes & add support for `default_sort_order`

pull/2469/head
Misha133 2 years ago
parent
commit
08bda4fd71
11 changed files with 61 additions and 10 deletions
  1. +5
    -0
      src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs
  2. +17
    -0
      src/Discord.Net.Core/Entities/Channels/ForumSortOrder.cs
  3. +8
    -0
      src/Discord.Net.Core/Entities/Channels/IForumChannel.cs
  4. +4
    -0
      src/Discord.Net.Rest/API/Common/Channel.cs
  5. +1
    -1
      src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs
  6. +2
    -0
      src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs
  7. +3
    -0
      src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs
  8. +2
    -1
      src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs
  9. +8
    -3
      src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs
  10. +3
    -2
      src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs
  11. +8
    -3
      src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs

+ 5
- 0
src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs View File

@@ -52,4 +52,9 @@ public class ForumChannelProperties : TextChannelProperties
/// Gets or sets a new default reaction emoji in this forum channel.
/// </summary>
public Optional<IEmote> DefaultReactionEmoji { get; set; }

/// <summary>
/// Gets or sets the rule used to order posts in forum channels.
/// </summary>
public Optional<ForumSortOrder> DefaultSortOrder { get; set; }
}

+ 17
- 0
src/Discord.Net.Core/Entities/Channels/ForumSortOrder.cs View File

@@ -0,0 +1,17 @@
namespace Discord;

/// <summary>
/// Defines the rule used to order posts in forum channels.
/// </summary>
public enum ForumSortOrder
{
/// <summary>
/// Sort forum posts by activity.
/// </summary>
LatestActivity = 0,

/// <summary>
/// Sort forum posts by creation time (from most recent to oldest).
/// </summary>
CreationDate = 1
}

+ 8
- 0
src/Discord.Net.Core/Entities/Channels/IForumChannel.cs View File

@@ -62,6 +62,14 @@ namespace Discord
/// </remarks>
IEmote DefaultReactionEmoji { get; }

/// <summary>
/// Gets or sets the rule used to order posts in forum channels.
/// </summary>
/// <remarks>
/// Defaults to null, which indicates a preferred sort order hasn't been set
/// </remarks>
ForumSortOrder? DefaultSortOrder { get; }

/// <summary>
/// Modifies this forum channel.
/// </summary>


+ 4
- 0
src/Discord.Net.Rest/API/Common/Channel.cs View File

@@ -83,7 +83,11 @@ namespace Discord.API
[JsonProperty("flags")]
public Optional<ChannelFlags> Flags { get; set; }

[JsonProperty("default_sort_order")]
public Optional<ForumSortOrder?> DefaultSortOrder { get; set; }

[JsonProperty("default_reaction_emoji")]
public Optional<ForumReactionEmoji> DefaultReactionEmoji { get; set; }

}
}

+ 1
- 1
src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs View File

@@ -5,7 +5,7 @@ namespace Discord.API;
public class ForumReactionEmoji
{
[JsonProperty("emoji_id")]
public Optional<ulong?> EmojiId { get; set; }
public ulong? EmojiId { get; set; }

[JsonProperty("emoji_name")]
public Optional<string> EmojiName { get; set; }


+ 2
- 0
src/Discord.Net.Rest/API/Rest/CreateGuildChannelParams.cs View File

@@ -39,6 +39,8 @@ namespace Discord.API.Rest
public Optional<int> ThreadRateLimitPerUser { get; set; }
[JsonProperty("available_tags")]
public Optional<ModifyForumTagParams[]> AvailableTags { get; set; }
[JsonProperty("default_sort_order")]
public Optional<ForumSortOrder?> DefaultSortOrder { get; set; }

public CreateGuildChannelParams(string name, ChannelType type)
{


+ 3
- 0
src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs View File

@@ -17,4 +17,7 @@ internal class ModifyForumChannelParams : ModifyTextChannelParams

[JsonProperty("default_reaction_emoji")]
public Optional<ModifyForumReactionEmojiParams> DefaultReactionEmoji { get; set; }

[JsonProperty("default_sort_order")]
public Optional<ForumSortOrder> DefaultSortOrder { get; set; }
}

+ 2
- 1
src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs View File

@@ -52,7 +52,8 @@ internal static class ForumHelper
EmojiName = args.DefaultReactionEmoji.Value is Emoji emoji ?
emoji.Name : Optional<string>.Unspecified
}
: Optional<ModifyForumReactionEmojiParams>.Unspecified
: Optional<ModifyForumReactionEmojiParams>.Unspecified,
DefaultSortOrder = args.DefaultSortOrder
};
return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false);
}


+ 8
- 3
src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs View File

@@ -38,6 +38,9 @@ namespace Discord.Rest
/// <inheritdoc/>
public IEmote DefaultReactionEmoji { get; private set; }

/// <inheritdoc/>
public ForumSortOrder? DefaultSortOrder { get; private set; }

/// <inheritdoc/>
public string Mention => MentionUtils.MentionChannel(Id);

@@ -67,14 +70,16 @@ namespace Discord.Rest
if(model.SlowMode.IsSpecified)
ThreadCreationInterval = model.SlowMode.Value;

DefaultSortOrder = model.DefaultSortOrder.GetValueOrDefault();

Tags = model.ForumTags.GetValueOrDefault(Array.Empty<API.ForumTags>()).Select(
x => new ForumTag(x.Id, x.Name, x.EmojiId.GetValueOrDefault(null), x.EmojiName.GetValueOrDefault(), x.Moderated)
).ToImmutableArray();

if (model.DefaultReactionEmoji.IsSpecified)
if (model.DefaultReactionEmoji.IsSpecified && model.DefaultReactionEmoji.Value is not null)
{
if (model.DefaultReactionEmoji.Value.EmojiId.IsSpecified && model.DefaultReactionEmoji.Value.EmojiId.Value != 0)
DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value.GetValueOrDefault(), null, false);
if (model.DefaultReactionEmoji.Value.EmojiId.HasValue && model.DefaultReactionEmoji.Value.EmojiId.Value != 0)
DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.GetValueOrDefault(), null, false);
else if (model.DefaultReactionEmoji.Value.EmojiName.IsSpecified)
DefaultReactionEmoji = new Emoji(model.DefaultReactionEmoji.Value.EmojiName.Value);
else


+ 3
- 2
src/Discord.Net.Rest/Entities/Guilds/GuildHelper.cs View File

@@ -364,7 +364,7 @@ namespace Discord.Rest
}).ToArray()
: Optional.Create<API.Overwrite[]>(),
SlowModeInterval = props.ThreadCreationInterval,
AvailableTags = props.Tags.GetValueOrDefault().Select(
AvailableTags = props.Tags.GetValueOrDefault(Array.Empty<ForumTagProperties>()).Select(
x => new ModifyForumTagParams
{
Id = x.Id,
@@ -390,7 +390,8 @@ namespace Discord.Rest
CategoryId = props.CategoryId,
IsNsfw = props.IsNsfw,
Topic = props.Topic,
DefaultAutoArchiveDuration = props.AutoArchiveDuration
DefaultAutoArchiveDuration = props.AutoArchiveDuration,
DefaultSortOrder = props.DefaultSortOrder.GetValueOrDefault(ForumSortOrder.LatestActivity)
};

var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false);


+ 8
- 3
src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs View File

@@ -42,6 +42,9 @@ namespace Discord.WebSocket
/// <inheritdoc/>
public IEmote DefaultReactionEmoji { get; private set; }

/// <inheritdoc/>
public ForumSortOrder? DefaultSortOrder { get; private set; }

/// <summary>
/// Gets the parent (category) of this channel in the guild's channel list.
/// </summary>
@@ -73,14 +76,16 @@ namespace Discord.WebSocket
if (model.SlowMode.IsSpecified)
ThreadCreationInterval = model.SlowMode.Value;

DefaultSortOrder = model.DefaultSortOrder.GetValueOrDefault();

Tags = model.ForumTags.GetValueOrDefault(Array.Empty<API.ForumTags>()).Select(
x => new ForumTag(x.Id, x.Name, x.EmojiId.GetValueOrDefault(null), x.EmojiName.GetValueOrDefault(), x.Moderated)
).ToImmutableArray();

if (model.DefaultReactionEmoji.IsSpecified)
if (model.DefaultReactionEmoji.IsSpecified && model.DefaultReactionEmoji.Value is not null)
{
if (model.DefaultReactionEmoji.Value.EmojiId.IsSpecified && model.DefaultReactionEmoji.Value.EmojiId.Value != 0)
DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value.GetValueOrDefault(), null, false);
if (model.DefaultReactionEmoji.Value.EmojiId.HasValue && model.DefaultReactionEmoji.Value.EmojiId.Value != 0)
DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.GetValueOrDefault(), null, false);
else if (model.DefaultReactionEmoji.Value.EmojiName.IsSpecified)
DefaultReactionEmoji = new Emoji(model.DefaultReactionEmoji.Value.EmojiName.Value);
else


Loading…
Cancel
Save