357 lines
15 KiB
Zig
357 lines
15 KiB
Zig
const Snowflake = @import("snowflake.zig").Snowflake;
|
|
const User = @import("user.zig").User;
|
|
const Member = @import("member.zig").Member;
|
|
const Attachment = @import("attachment.zig").Attachment;
|
|
const Application = @import("application.zig").Application;
|
|
const Embed = @import("embed.zig").Embed;
|
|
const AllowedMentionTypes = @import("shared.zig").AllowedMentionsTypes;
|
|
const PremiumTypes = @import("shared.zig").PremiumTypes;
|
|
const InteractionTypes = @import("shared.zig").InteractionTypes;
|
|
const StickerTypes = @import("shared.zig").StickerTypes;
|
|
const StickerFormatTypes = @import("shared.zig").StickerFormatTypes;
|
|
const MessageTypes = @import("shared.zig").MessageTypes;
|
|
const MessageFlags = @import("shared.zig").MessageFlags;
|
|
const Emoji = @import("emoji.zig").Emoji;
|
|
const Poll = @import("poll.zig").Poll;
|
|
const AvatarDecorationData = @import("user.zig").AvatarDecorationData;
|
|
const MessageActivityTypes = @import("shared.zig").MessageActivityTypes;
|
|
const Partial = @import("partial.zig").Partial;
|
|
|
|
/// TODO: fix this
|
|
pub const MessageComponent = isize;
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object
|
|
pub const Message = struct {
|
|
/// id of the message
|
|
id: Snowflake,
|
|
/// id of the channel the message was sent in
|
|
channel_id: Snowflake,
|
|
///
|
|
/// id of the guild the message was sent in
|
|
/// Note: For MESSAGE_CREATE and MESSAGE_UPDATE events, the message object may not contain a guild_id or member field since the events are sent directly to the receiving user and the bot who sent the message, rather than being sent through the guild like non-ephemeral messages.,
|
|
///
|
|
guild_id: ?Snowflake,
|
|
///
|
|
/// The author of this message (not guaranteed to be a valid user)
|
|
/// Note: The author object follows the structure of the user object, but is only a valid user in the case where the message is generated by a user or bot user. If the message is generated by a webhook, the author object corresponds to the webhook's id, username, and avatar. You can tell if a message is generated by a webhook by checking for the webhook_id on the message object.,
|
|
///
|
|
author: User,
|
|
///
|
|
/// Member properties for this message's author
|
|
/// Note: The member object exists in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events from text-based guild channels. This allows bots to obtain real-time member data without requiring bots to store member state in memory.,
|
|
///
|
|
member: ?Member,
|
|
/// Contents of the message
|
|
content: ?[]const u8,
|
|
/// When this message was sent
|
|
timestamp: []const u8,
|
|
/// When this message was edited (or null if never)
|
|
edited_timestamp: ?[]const u8,
|
|
/// Whether this was a TTS message
|
|
tts: bool,
|
|
/// Whether this message mentions everyone
|
|
mention_everyone: bool,
|
|
///
|
|
/// Users specifically mentioned in the message
|
|
/// Note: The user objects in the mentions array will only have the partial member field present in `MESSAGE_CREATE` and `MESSAGE_UPDATE` events from text-based guild channels.,
|
|
///
|
|
mentions: []User,
|
|
/// Roles specifically mentioned in this message
|
|
mention_roles: ?[][]const u8,
|
|
///
|
|
/// Channels specifically mentioned in this message
|
|
/// Note: Not all channel mentions in a message will appear in `mention_channels`. Only textual channels that are visible to everyone in a discoverable guild will ever be included. Only crossposted messages (via Channel Following) currently include `mention_channels` at all. If no mentions in the message meet these requirements, this field will not be sent.,
|
|
///
|
|
mention_channels: ?[]ChannelMention,
|
|
/// Any attached files
|
|
attachments: []Attachment,
|
|
/// Any embedded content
|
|
embeds: []Embed,
|
|
/// Reactions to the message
|
|
reactions: ?[]Reaction,
|
|
// Used for validating a message was sent
|
|
//nonce: ?union(enum) {int: isize,string: []const u8,},
|
|
/// Whether this message is pinned
|
|
pinned: bool,
|
|
/// If the message is generated by a webhook, this is the webhook's id
|
|
webhook_id: ?Snowflake,
|
|
/// Type of message
|
|
type: MessageTypes,
|
|
/// Sent with Rich Presence-related chat embeds
|
|
activity: ?MessageActivity,
|
|
/// Sent with Rich Presence-related chat embeds
|
|
application: ?Partial(Application),
|
|
/// if the message is an Interaction or application-owned webhook, this is the id of the application
|
|
application_id: ?Snowflake,
|
|
// Data showing the source of a crosspost, channel follow add, pin, or reply message
|
|
// message_reference: ?Omit(MessageReference, .{"failIfNotExists"}),
|
|
/// Message flags combined as a bitfield
|
|
flags: ?MessageFlags,
|
|
///
|
|
/// The stickers sent with the message (bots currently can only receive messages with stickers, not send)
|
|
/// @deprecated
|
|
///
|
|
stickers: ?[]Sticker,
|
|
///
|
|
/// The message associated with the `message_reference`
|
|
/// Note: This field is only returned for messages with a `type` of `19` (REPLY). If the message is a reply but the `referenced_message` field is not present, the backend did not attempt to fetch the message that was being replied to, so its state is unknown. If the field exists but is null, the referenced message was deleted.,
|
|
/// TAKES A POINTER
|
|
referenced_message: ?*Message,
|
|
/// The message associated with the `message_reference`. This is a minimal subset of fields in a message (e.g. `author` is excluded.)
|
|
message_snapshots: ?[]MessageSnapshot,
|
|
/// sent if the message is sent as a result of an interaction
|
|
interaction_metadata: ?MessageInteractionMetadata,
|
|
///
|
|
/// Sent if the message is a response to an Interaction
|
|
///
|
|
/// @deprecated Deprecated in favor of {@link interaction_metadata};
|
|
///
|
|
interaction: ?MessageInteraction,
|
|
// The thread that was started from this message, includes thread member object
|
|
// thread: ?Omit(Channel, .{"member"}), //& { member: ThreadMember };,
|
|
/// The components related to this message
|
|
components: ?[]MessageComponent,
|
|
/// Sent if the message contains stickers
|
|
sticker_items: ?[]StickerItem,
|
|
/// A generally increasing integer (there may be gaps or duplicates) that represents the approximate position of the message in a thread, it can be used to estimate the relative position of the message in a thread in company with `total_message_sent` on parent thread
|
|
position: ?isize,
|
|
/// The poll object
|
|
poll: ?Poll,
|
|
/// The call associated with the message
|
|
call: ?MessageCall,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-call-object
|
|
pub const MessageCall = struct {
|
|
/// Array of user object ids that participated in the call
|
|
participants: [][]const u8,
|
|
/// Time when call ended
|
|
ended_timestamp: []const u8,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#channel-mention-object
|
|
pub const ChannelMention = struct {
|
|
/// id of the channel
|
|
id: Snowflake,
|
|
/// id of the guild containing the channel
|
|
guild_id: Snowflake,
|
|
/// The type of channel
|
|
type: isize,
|
|
/// The name of the channel
|
|
name: []const u8,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#reaction-object
|
|
pub const Reaction = struct {
|
|
/// Total isize of times this emoji has been used to react (including super reacts)
|
|
count: isize,
|
|
///
|
|
count_details: ReactionCountDetails,
|
|
/// Whether the current user reacted using this emoji
|
|
me: bool,
|
|
///
|
|
me_burst: bool,
|
|
/// Emoji information
|
|
emoji: Partial(Emoji),
|
|
/// HEX colors used for super reaction
|
|
burst_colors: [][]const u8,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#get-reactions-reaction-types
|
|
pub const ReactionType = enum {
|
|
Normal,
|
|
Burst,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#reaction-count-details-object
|
|
pub const ReactionCountDetails = struct {
|
|
/// Count of super reactions
|
|
burst: isize,
|
|
///
|
|
normal: isize,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object-message-activity-structure
|
|
pub const MessageActivity = struct {
|
|
/// Type of message activity
|
|
type: MessageActivityTypes,
|
|
/// `party_id` from a Rich Presence event
|
|
party_id: ?Snowflake,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure
|
|
pub const MessageReference = struct {
|
|
/// Type of reference
|
|
type: ?MessageReferenceType,
|
|
/// id of the originating message
|
|
message_id: ?Snowflake,
|
|
///
|
|
/// id of the originating message's channel
|
|
/// Note: `channel_id` is optional when creating a reply, but will always be present when receiving an event/response that includes this data model.,
|
|
///
|
|
channel_id: ?Snowflake,
|
|
/// id of the originating message's guild
|
|
guild_id: ?Snowflake,
|
|
/// When sending, whether to error if the referenced message doesn't exist instead of sending as a normal (non-reply) message, default true
|
|
fail_if_not_exists: bool,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-reference-object-message-reference-types
|
|
pub const MessageReferenceType = enum {
|
|
///
|
|
/// A standard reference used by replies.
|
|
///
|
|
/// @remarks
|
|
/// When the type is set to this value, the field referenced_message on the message will be present
|
|
///
|
|
Default,
|
|
///
|
|
/// Reference used to point to a message at a point in time.
|
|
///
|
|
/// @remarks
|
|
/// When the type is set to this value, the field message_snapshot on the message will be present
|
|
///
|
|
/// This value can only be used for basic messages;
|
|
/// i.e. messages which do not have strong bindings to a non global entity.
|
|
/// Thus we support only messages with `DEFAULT` or `REPLY` types, but disallowed if there are any polls, calls, or components.
|
|
///
|
|
Forward,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-snapshot-object-message-snapshot-structure
|
|
pub const MessageSnapshot = struct {
|
|
/// https://discord.com/developers/docs/resources/channel#message-object
|
|
/// Minimal subset of fields in the forwarded message
|
|
message: struct {
|
|
content: ?[]const u8,
|
|
timestamp: []const u8,
|
|
edited_timestamp: ?[]const u8,
|
|
mentions: []struct {
|
|
username: []const u8,
|
|
global_name: ?[]const u8,
|
|
locale: ?[]const u8,
|
|
flags: ?isize,
|
|
premium_type: ?PremiumTypes,
|
|
public_flags: ?isize,
|
|
accent_color: ?isize,
|
|
id: Snowflake,
|
|
discriminator: []const u8,
|
|
avatar: ?[]const u8,
|
|
bot: ?bool,
|
|
system: ?bool,
|
|
mfa_enabled: ?bool,
|
|
verified: ?bool,
|
|
email: ?[]const u8,
|
|
banner: ?[]const u8,
|
|
avatar_decoration_data: ?AvatarDecorationData,
|
|
member: ?Partial(Member),
|
|
},
|
|
mention_roles: ?[][]const u8,
|
|
type: MessageTypes,
|
|
flags: ?MessageFlags,
|
|
stickers: ?[]Sticker,
|
|
components: ?[]MessageComponent,
|
|
sticker_items: ?[]StickerItem,
|
|
attachments: []Attachment,
|
|
embeds: []Embed,
|
|
},
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-structure
|
|
pub const Sticker = struct {
|
|
/// [Id of the sticker](https://discord.com/developers/docs/reference#image-formatting)
|
|
id: Snowflake,
|
|
/// Id of the pack the sticker is from
|
|
pack_id: ?Snowflake,
|
|
/// Name of the sticker
|
|
name: []const u8,
|
|
/// Description of the sticker
|
|
description: []const u8,
|
|
/// a unicode emoji representing the sticker's expression
|
|
tags: []const u8,
|
|
/// [type of sticker](https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types)
|
|
type: StickerTypes,
|
|
/// [Type of sticker format](https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types)
|
|
format_type: StickerFormatTypes,
|
|
/// Whether or not the sticker is available
|
|
available: ?bool,
|
|
/// Id of the guild that owns this sticker
|
|
guild_id: ?Snowflake,
|
|
/// The user that uploaded the sticker
|
|
user: ?User,
|
|
/// A sticker's sort order within a pack
|
|
sort_value: ?isize,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/receiving-and-responding#message-interaction-object-message-interaction-structure
|
|
pub const MessageInteraction = struct {
|
|
/// Id of the interaction
|
|
id: Snowflake,
|
|
/// The type of interaction
|
|
type: InteractionTypes,
|
|
/// The name of the ApplicationCommand including the name of the subcommand/subcommand group
|
|
name: []const u8,
|
|
/// The user who invoked the interaction
|
|
user: User,
|
|
/// The member who invoked the interaction in the guild
|
|
member: ?Partial(Member),
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-interaction-metadata-object-message-interaction-metadata-structure
|
|
pub const MessageInteractionMetadata = struct {
|
|
/// Id of the interaction
|
|
id: Snowflake,
|
|
/// The type of interaction
|
|
type: InteractionTypes,
|
|
/// User who triggered the interaction
|
|
user: User,
|
|
// IDs for installation context(s) related to an interaction
|
|
// authorizing_integration_owners: Partial(AutoArrayHashMap(ApplicationIntegrationType, []const u8)),
|
|
/// ID of the original response message, present only on follow-up messages
|
|
original_response_message_id: ?Snowflake,
|
|
/// ID of the message that contained interactive component, present only on messages created from component interactions
|
|
interacted_message_id: ?Snowflake,
|
|
/// Metadata for the interaction that was used to open the modal, present only on modal submit interactions
|
|
/// TAKES A POINTER
|
|
triggering_interaction_metadata: ?*MessageInteractionMetadata,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/sticker#sticker-item-object-sticker-item-structure
|
|
pub const StickerItem = struct {
|
|
/// Id of the sticker
|
|
id: Snowflake,
|
|
/// Name of the sticker
|
|
name: []const u8,
|
|
/// [Type of sticker format](https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types)
|
|
format_type: StickerFormatTypes,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/sticker#sticker-pack-object-sticker-pack-structure
|
|
pub const StickerPack = struct {
|
|
/// id of the sticker pack
|
|
id: Snowflake,
|
|
/// the stickers in the pack
|
|
stickers: []Sticker,
|
|
/// name of the sticker pack
|
|
name: []const u8,
|
|
/// id of the pack's SKU
|
|
sku_id: Snowflake,
|
|
/// id of a sticker in the pack which is shown as the pack's icon
|
|
cover_sticker_id: ?Snowflake,
|
|
/// description of the sticker pack
|
|
description: []const u8,
|
|
/// id of the sticker pack's [banner image](https://discord.com/developers/docs/reference#image-formatting)
|
|
banner_asset_id: ?Snowflake,
|
|
};
|
|
|
|
pub const AllowedMentions = struct {
|
|
/// An array of allowed mention types to parse from the content.
|
|
parse: []AllowedMentionTypes,
|
|
/// Array of role_ids to mention (Max size of 100)
|
|
roles: []Snowflake,
|
|
/// Array of user_ids to mention (Max size of 100)
|
|
users: []Snowflake,
|
|
/// For replies, whether to mention the author of the message being replied to (default false)
|
|
replied_user: ?bool,
|
|
};
|