Browse Source

[Feature] Add new message types & error codes (#2562)

* Add new message types & error codes

* add role subscription system channel flags and message property
pull/2572/head
Misha133 GitHub 2 years ago
parent
commit
a3ee8555c6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 146 additions and 10 deletions
  1. +8
    -5
      src/Discord.Net.Core/DiscordErrorCode.cs
  2. +14
    -4
      src/Discord.Net.Core/Entities/Guilds/SystemChannelMessageDeny.cs
  3. +8
    -0
      src/Discord.Net.Core/Entities/Messages/IMessage.cs
  4. +35
    -0
      src/Discord.Net.Core/Entities/Messages/MessageRoleSubscriptionData.cs
  5. +37
    -1
      src/Discord.Net.Core/Entities/Messages/MessageType.cs
  6. +2
    -0
      src/Discord.Net.Rest/API/Common/Message.cs
  7. +18
    -0
      src/Discord.Net.Rest/API/Common/MessageRoleSubscriptionData.cs
  8. +12
    -0
      src/Discord.Net.Rest/Entities/Messages/RestMessage.cs
  9. +12
    -0
      src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs

+ 8
- 5
src/Discord.Net.Core/DiscordErrorCode.cs View File

@@ -98,13 +98,14 @@ namespace Discord
MaximumStickersReached = 30039, MaximumStickersReached = 30039,
MaximumPruneRequestReached = 30040, MaximumPruneRequestReached = 30040,
MaximumGuildWidgetsReached = 30042, MaximumGuildWidgetsReached = 30042,
#endregion

#region General Request Errors (40XXX)
BitrateIsTooHighForChannelOfThisType = 30052, BitrateIsTooHighForChannelOfThisType = 30052,
MaximumNumberOfEditsReached = 30046, MaximumNumberOfEditsReached = 30046,
MaximumNumberOfPinnedThreadsInAForumChannelReached = 30047, MaximumNumberOfPinnedThreadsInAForumChannelReached = 30047,
MaximumNumberOfTagsInAForumChannelReached = 30048, MaximumNumberOfTagsInAForumChannelReached = 30048,
MaximumNumberOfWebhooksReached = 30058,
#endregion

#region General Request Errors (40XXX)
TokenUnauthorized = 40001, TokenUnauthorized = 40001,
InvalidVerification = 40002, InvalidVerification = 40002,
OpeningDMTooFast = 40003, OpeningDMTooFast = 40003,
@@ -118,10 +119,11 @@ namespace Discord
ApplicationNameAlreadyExists = 40041, ApplicationNameAlreadyExists = 40041,
ApplicationInteractionFailedToSend = 40043, ApplicationInteractionFailedToSend = 40043,
CannotSendAMessageInAForumChannel = 40058, CannotSendAMessageInAForumChannel = 40058,
ThereAreNoTagsAvailableThatCanBeSetByNonModerators = 40066,
ATagIsRequiredToCreateAForumPostInThisChannel = 40067,
InteractionHasAlreadyBeenAcknowledged = 40060, InteractionHasAlreadyBeenAcknowledged = 40060,
TagNamesMustBeUnique = 40061, TagNamesMustBeUnique = 40061,
ServiceResourceIsBeingRateLimited = 40062,
ThereAreNoTagsAvailableThatCanBeSetByNonModerators = 40066,
ATagIsRequiredToCreateAForumPostInThisChannel = 40067,
#endregion #endregion


#region Action Preconditions/Checks (50XXX) #region Action Preconditions/Checks (50XXX)
@@ -160,6 +162,7 @@ namespace Discord
InvalidFileUpload = 50046, InvalidFileUpload = 50046,
CannotSelfRedeemGift = 50054, CannotSelfRedeemGift = 50054,
InvalidGuild = 50055, InvalidGuild = 50055,
InvalidRequestOrigin = 50067,
InvalidMessageType = 50068, InvalidMessageType = 50068,
PaymentSourceRequiredForGift = 50070, PaymentSourceRequiredForGift = 50070,
CannotModifySystemWebhook = 50073, CannotModifySystemWebhook = 50073,


+ 14
- 4
src/Discord.Net.Core/Entities/Guilds/SystemChannelMessageDeny.cs View File

@@ -13,18 +13,28 @@ namespace Discord
/// <summary> /// <summary>
/// Deny the messages that are sent when a user joins the guild. /// Deny the messages that are sent when a user joins the guild.
/// </summary> /// </summary>
WelcomeMessage = 0b1,
WelcomeMessage = 1 << 0,
/// <summary> /// <summary>
/// Deny the messages that are sent when a user boosts the guild. /// Deny the messages that are sent when a user boosts the guild.
/// </summary> /// </summary>
GuildBoost = 0b10,
GuildBoost = 1 << 1,
/// <summary> /// <summary>
/// Deny the messages that are related to guild setup. /// Deny the messages that are related to guild setup.
/// </summary> /// </summary>
GuildSetupTip = 0b100,
GuildSetupTip = 1 << 2,
/// <summary> /// <summary>
/// Deny the reply with sticker button on welcome messages. /// Deny the reply with sticker button on welcome messages.
/// </summary> /// </summary>
WelcomeMessageReply = 0b1000
WelcomeMessageReply = 1 << 3,

/// <summary>
/// Deny role subscription purchase and renewal notifications in the guild.
/// </summary>
RoleSubscriptionPurchase = 1 << 4,

/// <summary>
/// Hide role subscription sticker reply buttons in the guild.
/// </summary>
RoleSubscriptionPurchaseReplies = 1 << 5,
} }
} }

+ 8
- 0
src/Discord.Net.Core/Entities/Messages/IMessage.cs View File

@@ -209,6 +209,14 @@ namespace Discord
/// </returns> /// </returns>
IMessageInteraction Interaction { get; } IMessageInteraction Interaction { get; }


/// <summary>
/// Gets the data of the role subscription purchase or renewal that prompted this <see cref="MessageType.RoleSubscriptionPurchase"/> message.
/// </summary>
/// <returns>
/// A <see cref="MessageRoleSubscriptionData"/> if the message is a role subscription purchase message; otherwise <see langword="null"/>.
/// </returns>
MessageRoleSubscriptionData RoleSubscriptionData { get; }

/// <summary> /// <summary>
/// Adds a reaction to this message. /// Adds a reaction to this message.
/// </summary> /// </summary>


+ 35
- 0
src/Discord.Net.Core/Entities/Messages/MessageRoleSubscriptionData.cs View File

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

/// <summary>
/// Represents a role subscription data in <see cref="IMessage"/>.
/// </summary>
public class MessageRoleSubscriptionData
{
/// <summary>
/// Gets the id of the sku and listing that the user is subscribed to.
/// </summary>
public ulong Id { get; }

/// <summary>
/// Gets the name of the tier that the user is subscribed to.
/// </summary>
public string TierName { get; }

/// <summary>
/// Gets the cumulative number of months that the user has been subscribed for.
/// </summary>
public int MonthsSubscribed { get; }

/// <summary>
/// Gets whether this notification is for a renewal rather than a new purchase.
/// </summary>
public bool IsRenewal { get; }

internal MessageRoleSubscriptionData(ulong id, string tierName, int monthsSubscribed, bool isRenewal)
{
Id = id;
TierName = tierName;
MonthsSubscribed = monthsSubscribed;
IsRenewal = isRenewal;
}
}

+ 37
- 1
src/Discord.Net.Core/Entities/Messages/MessageType.cs View File

@@ -99,12 +99,48 @@ namespace Discord
/// </remarks> /// </remarks>
ThreadStarterMessage = 21, ThreadStarterMessage = 21,
/// <summary> /// <summary>
/// The message for a invite reminder.
/// The message for an invite reminder.
/// </summary> /// </summary>
GuildInviteReminder = 22, GuildInviteReminder = 22,
/// <summary> /// <summary>
/// The message for a context menu command. /// The message for a context menu command.
/// </summary> /// </summary>
ContextMenuCommand = 23, ContextMenuCommand = 23,
/// <summary>
/// The message for an automod action.
/// </summary>
AutoModerationAction = 24,
/// <summary>
/// The message for a role subscription purchase.
/// </summary>
RoleSubscriptionPurchase = 25,
/// <summary>
/// The message for an interaction premium upsell.
/// </summary>
InteractionPremiumUpsell = 26,
/// <summary>
/// The message for a stage start.
/// </summary>
StageStart = 27,
/// <summary>
/// The message for a stage end.
/// </summary>
StageEnd = 28,
/// <summary>
/// The message for a stage speaker.
/// </summary>
StageSpeaker = 29,
/// <summary>
/// The message for a stage raise hand.
/// </summary>
StageRaiseHand = 30,
/// <summary>
/// The message for a stage raise hand.
/// </summary>
StageTopic = 31,
/// <summary>
/// The message for a guild application premium subscription.
/// </summary>
GuildApplicationPremiumSubscription = 32
} }
} }

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

@@ -62,5 +62,7 @@ namespace Discord.API
public Optional<MessageInteraction> Interaction { get; set; } public Optional<MessageInteraction> Interaction { get; set; }
[JsonProperty("sticker_items")] [JsonProperty("sticker_items")]
public Optional<StickerItem[]> StickerItems { get; set; } public Optional<StickerItem[]> StickerItems { get; set; }
[JsonProperty("role_subscription_data")]
public Optional<MessageRoleSubscriptionData> RoleSubscriptionData { get; set; }
} }
} }

+ 18
- 0
src/Discord.Net.Rest/API/Common/MessageRoleSubscriptionData.cs View File

@@ -0,0 +1,18 @@
using Newtonsoft.Json;

namespace Discord.API;

internal class MessageRoleSubscriptionData
{
[JsonProperty("role_subscription_listing_id")]
public ulong SubscriptionListingId { get; set; }

[JsonProperty("tier_name")]
public string TierName { get; set; }

[JsonProperty("total_months_subscribed")]
public int MonthsSubscribed { get; set; }

[JsonProperty("is_renewal")]
public bool IsRenewal { get; set; }
}

+ 12
- 0
src/Discord.Net.Rest/Entities/Messages/RestMessage.cs View File

@@ -80,6 +80,9 @@ namespace Discord.Rest
/// <inheritdoc/> /// <inheritdoc/>
public MessageType Type { get; private set; } public MessageType Type { get; private set; }


/// <inheritdoc />
public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; }

/// <inheritdoc/> /// <inheritdoc/>
public IReadOnlyCollection<ActionRowComponent> Components { get; private set; } public IReadOnlyCollection<ActionRowComponent> Components { get; private set; }
/// <summary> /// <summary>
@@ -243,6 +246,15 @@ namespace Discord.Rest
_userMentions = newMentions.ToImmutable(); _userMentions = newMentions.ToImmutable();
} }
} }

if (model.RoleSubscriptionData.IsSpecified)
{
RoleSubscriptionData = new(
model.RoleSubscriptionData.Value.SubscriptionListingId,
model.RoleSubscriptionData.Value.TierName,
model.RoleSubscriptionData.Value.MonthsSubscribed,
model.RoleSubscriptionData.Value.IsRenewal);
}
} }
/// <inheritdoc /> /// <inheritdoc />
public async Task UpdateAsync(RequestOptions options = null) public async Task UpdateAsync(RequestOptions options = null)


+ 12
- 0
src/Discord.Net.WebSocket/Entities/Messages/SocketMessage.cs View File

@@ -78,6 +78,9 @@ namespace Discord.WebSocket
/// <inheritdoc/> /// <inheritdoc/>
public MessageType Type { get; private set; } public MessageType Type { get; private set; }


/// <inheritdoc />
public MessageRoleSubscriptionData RoleSubscriptionData { get; private set; }

/// <summary> /// <summary>
/// Returns all attachments included in this message. /// Returns all attachments included in this message.
/// </summary> /// </summary>
@@ -271,6 +274,15 @@ namespace Discord.WebSocket


if (model.Flags.IsSpecified) if (model.Flags.IsSpecified)
Flags = model.Flags.Value; Flags = model.Flags.Value;

if (model.RoleSubscriptionData.IsSpecified)
{
RoleSubscriptionData = new(
model.RoleSubscriptionData.Value.SubscriptionListingId,
model.RoleSubscriptionData.Value.TierName,
model.RoleSubscriptionData.Value.MonthsSubscribed,
model.RoleSubscriptionData.Value.IsRenewal);
}
} }


/// <inheritdoc /> /// <inheritdoc />


Loading…
Cancel
Save