diff --git a/src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs b/src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs index 243f18cb5..507a7dd28 100644 --- a/src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs +++ b/src/Discord.Net.Core/Entities/Channels/ForumChannelProperties.cs @@ -47,4 +47,9 @@ public class ForumChannelProperties : TextChannelProperties /// Gets or sets a collection of tags inside of this forum channel. /// public Optional> Tags { get; set; } + + /// + /// Gets or sets a new default reaction emoji in this forum channel. + /// + public Optional DefaultReactionEmoji { get; set; } } diff --git a/src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs b/src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs index ba8d78eeb..20463df8d 100644 --- a/src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs +++ b/src/Discord.Net.Rest/API/Common/ForumReactionEmoji.cs @@ -5,7 +5,7 @@ namespace Discord.API; public class ForumReactionEmoji { [JsonProperty("emoji_id")] - public Optional EmojiId { get; set; } + public Optional EmojiId { get; set; } [JsonProperty("emoji_name")] public Optional EmojiName { get; set; } diff --git a/src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs index 9d97e80fa..881e922f8 100644 --- a/src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs +++ b/src/Discord.Net.Rest/API/Rest/ModifyForumChannelParams.cs @@ -7,11 +7,14 @@ namespace Discord.API.Rest; internal class ModifyForumChannelParams : ModifyTextChannelParams { [JsonProperty("available_tags")] - public Optional Tags { get; set; } + public Optional Tags { get; set; } [JsonProperty("default_thread_rate_limit_per_user")] public Optional DefaultSlowModeInterval { get; set; } [JsonProperty("rate_limit_per_user")] public Optional ThreadCreationInterval { get; set; } + + [JsonProperty("default_reaction_emoji")] + public Optional DefaultReactionEmoji { get; set; } } diff --git a/src/Discord.Net.Rest/API/Rest/ModifyForumReactionEmojiParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyForumReactionEmojiParams.cs new file mode 100644 index 000000000..d659f70cd --- /dev/null +++ b/src/Discord.Net.Rest/API/Rest/ModifyForumReactionEmojiParams.cs @@ -0,0 +1,15 @@ +using Newtonsoft.Json; + +namespace Discord.API; + +[JsonObject(MemberSerialization = MemberSerialization.OptIn)] +public class ModifyForumReactionEmojiParams +{ + [JsonProperty("emoji_id")] + public Optional EmojiId { get; set; } + + [JsonProperty("emoji_name")] + public Optional EmojiName { get; set; } +} + + diff --git a/src/Discord.Net.Rest/API/Rest/ForumTagParams.cs b/src/Discord.Net.Rest/API/Rest/ModifyForumTagParams.cs similarity index 93% rename from src/Discord.Net.Rest/API/Rest/ForumTagParams.cs rename to src/Discord.Net.Rest/API/Rest/ModifyForumTagParams.cs index d86f33b52..4d792d0af 100644 --- a/src/Discord.Net.Rest/API/Rest/ForumTagParams.cs +++ b/src/Discord.Net.Rest/API/Rest/ModifyForumTagParams.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json; namespace Discord.API { [JsonObject(MemberSerialization = MemberSerialization.OptIn)] - internal class ForumTagParams + internal class ModifyForumTagParams { [JsonProperty("id")] public Optional Id { get; set; } diff --git a/src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs b/src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs index aeb7c22a4..2597de3aa 100644 --- a/src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs +++ b/src/Discord.Net.Rest/Entities/Channels/ForumHelper.cs @@ -1,3 +1,4 @@ +using Discord.API; using System; using System.Linq; using System.Threading.Tasks; @@ -30,7 +31,7 @@ internal static class ForumHelper DefaultSlowModeInterval = args.DefaultSlowModeInterval, ThreadCreationInterval = args.ThreadCreationInterval, Tags = args.Tags.IsSpecified - ? args.Tags.Value.Select(tag => new API.ForumTagParams + ? args.Tags.Value.Select(tag => new API.ModifyForumTagParams { Name = tag.Name, EmojiId = tag.Emoji is Emote emote @@ -40,9 +41,18 @@ internal static class ForumHelper ? emoji.Name : Optional.Unspecified }).ToArray() - : Optional.Create(), + : Optional.Create(), Flags = args.Flags.GetValueOrDefault(), Topic = args.Topic, + DefaultReactionEmoji = args.DefaultReactionEmoji.IsSpecified + ? new API.ModifyForumReactionEmojiParams + { + EmojiId = args.DefaultReactionEmoji.Value is Emote emote ? + emote.Id : Optional.Unspecified, + EmojiName = args.DefaultReactionEmoji.Value is Emoji emoji ? + emoji.Name : Optional.Unspecified + } + : Optional.Unspecified }; return await client.ApiClient.ModifyGuildChannelAsync(channel.Id, apiArgs, options).ConfigureAwait(false); } diff --git a/src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs b/src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs index b8af7bc9f..8f48aca42 100644 --- a/src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs +++ b/src/Discord.Net.Rest/Entities/Channels/RestForumChannel.cs @@ -74,7 +74,7 @@ namespace Discord.Rest if (model.DefaultReactionEmoji.IsSpecified) { if (model.DefaultReactionEmoji.Value.EmojiId.IsSpecified && model.DefaultReactionEmoji.Value.EmojiId.Value != 0) - DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value, null, false); + DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value.GetValueOrDefault(), null, false); else if (model.DefaultReactionEmoji.Value.EmojiName.IsSpecified) DefaultReactionEmoji = new Emoji(model.DefaultReactionEmoji.Value.EmojiName.Value); else diff --git a/src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs b/src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs index 09745abf8..9216a14f5 100644 --- a/src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs +++ b/src/Discord.Net.WebSocket/Entities/Channels/SocketForumChannel.cs @@ -80,7 +80,7 @@ namespace Discord.WebSocket if (model.DefaultReactionEmoji.IsSpecified) { if (model.DefaultReactionEmoji.Value.EmojiId.IsSpecified && model.DefaultReactionEmoji.Value.EmojiId.Value != 0) - DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value, null, false); + DefaultReactionEmoji = new Emote(model.DefaultReactionEmoji.Value.EmojiId.Value.GetValueOrDefault(), null, false); else if (model.DefaultReactionEmoji.Value.EmojiName.IsSpecified) DefaultReactionEmoji = new Emoji(model.DefaultReactionEmoji.Value.EmojiName.Value); else