| @@ -42,7 +42,7 @@ namespace Discord.Net.Models | |||||
| /// <param name="thread">The thread that was started from this message, includes thread member object.</param> | /// <param name="thread">The thread that was started from this message, includes thread member object.</param> | ||||
| /// <param name="components">Sent if the message contains components like buttons, action rows, or other interactive components.</param> | /// <param name="components">Sent if the message contains components like buttons, action rows, or other interactive components.</param> | ||||
| [JsonConstructor] | [JsonConstructor] | ||||
| public Message(Snowflake id, Snowflake channelId, Optional<Snowflake> guildId, User author, Optional<GuildMember> member, string content, DateTimeOffset timestamp, DateTimeOffset? editedTimestamp, bool tts, bool mentionEveryone, UserMention[] mentions, Snowflake[] mentionRoles, Optional<ChannelMention[]> mentionChannels, Attachment[] attachments, Embed[] embeds, Optional<Reaction[]> reactions, Optional<string> nonce, bool pinned, Optional<Snowflake> webhookId, int type, Optional<MessageActivity> activity, Optional<Application> application, Optional<Snowflake> applicationId, Optional<MessageReference> messageReference, Optional<MessageFlags> flags, Optional<Sticker[]> stickers, Optional<Message?> referencedMessage, Optional<MessageInteraction> interaction, Optional<Channel> thread, Optional<Component> components) | |||||
| public Message(Snowflake id, Snowflake channelId, Optional<Snowflake> guildId, User author, Optional<GuildMember> member, string content, DateTimeOffset timestamp, DateTimeOffset? editedTimestamp, bool tts, bool mentionEveryone, UserMention[] mentions, Snowflake[] mentionRoles, Optional<ChannelMention[]> mentionChannels, Attachment[] attachments, Embed[] embeds, Optional<Reaction[]> reactions, Optional<string> nonce, bool pinned, Optional<Snowflake> webhookId, int type, Optional<MessageActivity> activity, Optional<Application> application, Optional<Snowflake> applicationId, Optional<MessageReference> messageReference, Optional<MessageFlags> flags, Optional<Sticker[]> stickers, Optional<Message?> referencedMessage, Optional<MessageInteraction> interaction, Optional<Channel> thread, Optional<ActionRowComponent[]> components) | |||||
| { | { | ||||
| Id = id; | Id = id; | ||||
| ChannelId = channelId; | ChannelId = channelId; | ||||
| @@ -254,6 +254,6 @@ namespace Discord.Net.Models | |||||
| /// Sent if the message contains components like buttons, action rows, or other interactive components. | /// Sent if the message contains components like buttons, action rows, or other interactive components. | ||||
| /// </summary> | /// </summary> | ||||
| [JsonPropertyName("components")] | [JsonPropertyName("components")] | ||||
| public Optional<Component> Components { get; } | |||||
| public Optional<ActionRowComponent[]> Components { get; } | |||||
| } | } | ||||
| } | } | ||||
| @@ -12,17 +12,5 @@ | |||||
| <ItemGroup> | <ItemGroup> | ||||
| <PackageReference Include="System.Text.Json" /> | <PackageReference Include="System.Text.Json" /> | ||||
| </ItemGroup> | </ItemGroup> | ||||
| <ItemGroup> | |||||
| <Folder Include="Emoji\" /> | |||||
| <Folder Include="Guild\" /> | |||||
| <Folder Include="GuildTemplate\" /> | |||||
| <Folder Include="Invite\" /> | |||||
| <Folder Include="Teams\" /> | |||||
| <Folder Include="Webhook\" /> | |||||
| <Folder Include="Voice\" /> | |||||
| <Folder Include="User\" /> | |||||
| <Folder Include="StageInstance\" /> | |||||
| </ItemGroup> | |||||
| </Project> | </Project> | ||||
| @@ -5,25 +5,25 @@ namespace Discord.Net.Models | |||||
| /// <summary> | /// <summary> | ||||
| /// Represents the guild NSFW level. | /// Represents the guild NSFW level. | ||||
| /// </summary> | /// </summary> | ||||
| public enum GuildNSFWLevel | |||||
| public enum GuildNsfwLevel | |||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| /// Default level, don't scan any content. | |||||
| /// Default level. | |||||
| /// </summary> | /// </summary> | ||||
| Default = 0, | Default = 0, | ||||
| /// <summary> | /// <summary> | ||||
| /// Scan content from members without roles. | |||||
| /// Guild contains explicit content. | |||||
| /// </summary> | /// </summary> | ||||
| Explicit = 1, | Explicit = 1, | ||||
| /// <summary> | /// <summary> | ||||
| /// Scan content from all members. | |||||
| /// Guild is safe for work. | |||||
| /// </summary> | /// </summary> | ||||
| Safe = 2, | Safe = 2, | ||||
| /// <summary> | /// <summary> | ||||
| /// Server has an age restriction. | |||||
| /// Guild has an age restriction. | |||||
| /// </summary> | /// </summary> | ||||
| AgeRestricted = 3, | AgeRestricted = 3, | ||||
| } | } | ||||
| @@ -5,7 +5,7 @@ namespace Discord.Net.Models | |||||
| /// <summary> | /// <summary> | ||||
| /// Represents the m f a level. | /// Represents the m f a level. | ||||
| /// </summary> | /// </summary> | ||||
| public enum MFALevel | |||||
| public enum MfaLevel | |||||
| { | { | ||||
| /// <summary> | /// <summary> | ||||
| /// Guild has no MFA/2FA requirement for moderation actions. | /// Guild has no MFA/2FA requirement for moderation actions. | ||||
| @@ -0,0 +1,26 @@ | |||||
| using System.Text.Json.Serialization; | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents a component object. | |||||
| /// </summary> | |||||
| public record ActionRowComponent : Component | |||||
| { | |||||
| /// <summary> | |||||
| /// Creates an <see cref="ActionRowComponent"/> with the provided parameters. | |||||
| /// </summary> | |||||
| /// <param name="type">Component type.</param> | |||||
| [JsonConstructor] | |||||
| public ActionRowComponent(ComponentType type) | |||||
| : base(type) | |||||
| { | |||||
| } | |||||
| /// <summary> | |||||
| /// Components inside this action row, like buttons or other interactive components. | |||||
| /// </summary> | |||||
| [JsonPropertyName("components")] | |||||
| public Optional<Component[]> Components { get; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,68 @@ | |||||
| using System.Text.Json.Serialization; | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents a button component object. | |||||
| /// </summary> | |||||
| public record ButtonComponent : Component | |||||
| { | |||||
| /// <summary> | |||||
| /// Creates a <see cref="ButtonComponent"/> with the provided parameters. | |||||
| /// </summary> | |||||
| /// <param name="type">Component type.</param> | |||||
| /// <param name="style">One of button styles.</param> | |||||
| /// <param name="label">Text that appears on the button, max 80 characters.</param> | |||||
| /// <param name="emoji">Name, id, and animated.</param> | |||||
| /// <param name="customId">A developer-defined identifier for the button, max 100 characters.</param> | |||||
| /// <param name="url">A url for link-style buttons.</param> | |||||
| /// <param name="disabled">Whether the button is disabled, default false.</param> | |||||
| [JsonConstructor] | |||||
| public ButtonComponent(ComponentType type, Optional<ButtonStyle> style, Optional<string> label, Optional<Emoji> emoji, Optional<string> customId, Optional<string> url, Optional<bool> disabled) | |||||
| : base(type) | |||||
| { | |||||
| Style = style; | |||||
| Label = label; | |||||
| Emoji = emoji; | |||||
| CustomId = customId; | |||||
| Url = url; | |||||
| Disabled = disabled; | |||||
| } | |||||
| /// <summary> | |||||
| /// One of button styles. | |||||
| /// </summary> | |||||
| [JsonPropertyName("style")] | |||||
| public Optional<ButtonStyle> Style { get; } | |||||
| /// <summary> | |||||
| /// Text that appears on the button, max 80 characters. | |||||
| /// </summary> | |||||
| [JsonPropertyName("label")] | |||||
| public Optional<string> Label { get; } | |||||
| /// <summary> | |||||
| /// Name, id, and animated. | |||||
| /// </summary> | |||||
| [JsonPropertyName("emoji")] | |||||
| public Optional<Emoji> Emoji { get; } | |||||
| /// <summary> | |||||
| /// A developer-defined identifier for the button, max 100 characters. | |||||
| /// </summary> | |||||
| [JsonPropertyName("custom_id")] | |||||
| public Optional<string> CustomId { get; } | |||||
| /// <summary> | |||||
| /// A url for link-style buttons. | |||||
| /// </summary> | |||||
| [JsonPropertyName("url")] | |||||
| public Optional<string> Url { get; } | |||||
| /// <summary> | |||||
| /// Whether the button is disabled, default false. | |||||
| /// </summary> | |||||
| [JsonPropertyName("disabled")] | |||||
| public Optional<bool> Disabled { get; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,33 @@ | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents the button style type. | |||||
| /// </summary> | |||||
| public enum ButtonStyle | |||||
| { | |||||
| /// <summary> | |||||
| /// Blurple. | |||||
| /// </summary> | |||||
| Primary = 1, | |||||
| /// <summary> | |||||
| /// Grey. | |||||
| /// </summary> | |||||
| Secondary = 2, | |||||
| /// <summary> | |||||
| /// Green. | |||||
| /// </summary> | |||||
| Success = 3, | |||||
| /// <summary> | |||||
| /// Red. | |||||
| /// </summary> | |||||
| Danger = 4, | |||||
| /// <summary> | |||||
| /// Grey, navigates to a URL. | |||||
| /// </summary> | |||||
| Link = 5, | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,26 @@ | |||||
| using System.Text.Json.Serialization; | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents a component object. | |||||
| /// </summary> | |||||
| public record Component | |||||
| { | |||||
| /// <summary> | |||||
| /// Creates a <see cref="Component"/> with the provided parameters. | |||||
| /// </summary> | |||||
| /// <param name="type">Component type.</param> | |||||
| [JsonConstructor] | |||||
| public Component(ComponentType type) | |||||
| { | |||||
| Type = type; | |||||
| } | |||||
| /// <summary> | |||||
| /// Component type. | |||||
| /// </summary> | |||||
| [JsonPropertyName("type")] | |||||
| public ComponentType Type { get; } | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,20 @@ | |||||
| using System; | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents the component type. | |||||
| /// </summary> | |||||
| public enum ComponentType | |||||
| { | |||||
| /// <summary> | |||||
| /// A container for other components. | |||||
| /// </summary> | |||||
| ActionRow = 1, | |||||
| /// <summary> | |||||
| /// A clickable button. | |||||
| /// </summary> | |||||
| Button = 2, | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,23 @@ | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents the interaction type. | |||||
| /// </summary> | |||||
| public enum InteractionType | |||||
| { | |||||
| /// <summary> | |||||
| /// Received when registering an interaction, replied with a pong. | |||||
| /// </summary> | |||||
| Ping = 1, | |||||
| /// <summary> | |||||
| /// This interaction is from a slash command. | |||||
| /// </summary> | |||||
| ApplicationCommand = 2, | |||||
| /// <summary> | |||||
| /// This interaction is from a component. | |||||
| /// </summary> | |||||
| MessageComponent = 3, | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,50 @@ | |||||
| using System.Text.Json.Serialization; | |||||
| namespace Discord.Net.Models | |||||
| { | |||||
| /// <summary> | |||||
| /// Represents a message interaction object. | |||||
| /// </summary> | |||||
| public record MessageInteraction | |||||
| { | |||||
| /// <summary> | |||||
| /// Creates a <see cref="MessageInteraction"/> with the provided parameters. | |||||
| /// </summary> | |||||
| /// <param name="id">Id of the interaction.</param> | |||||
| /// <param name="type">The type of interaction.</param> | |||||
| /// <param name="name">The name of the ApplicationCommand.</param> | |||||
| /// <param name="user">The user who invoked the interaction.</param> | |||||
| [JsonConstructor] | |||||
| public MessageInteraction(Snowflake id, InteractionType type, string name, User user) | |||||
| { | |||||
| Id = id; | |||||
| Type = type; | |||||
| Name = name; | |||||
| User = user; | |||||
| } | |||||
| /// <summary> | |||||
| /// Id of the interaction. | |||||
| /// </summary> | |||||
| [JsonPropertyName("id")] | |||||
| public Snowflake Id { get; } | |||||
| /// <summary> | |||||
| /// The type of interaction. | |||||
| /// </summary> | |||||
| [JsonPropertyName("type")] | |||||
| public InteractionType Type { get; } | |||||
| /// <summary> | |||||
| /// The name of the ApplicationCommand. | |||||
| /// </summary> | |||||
| [JsonPropertyName("name")] | |||||
| public string Name { get; } | |||||
| /// <summary> | |||||
| /// The user who invoked the interaction. | |||||
| /// </summary> | |||||
| [JsonPropertyName("user")] | |||||
| public User User { get; } | |||||
| } | |||||
| } | |||||