forked from yuzucchii/discord.zig
1684 lines
55 KiB
Zig
1684 lines
55 KiB
Zig
//! ISC License
|
|
//!
|
|
//! Copyright (c) 2024-2025 Yuzu
|
|
//!
|
|
//! Permission to use, copy, modify, and/or distribute this software for any
|
|
//! purpose with or without fee is hereby granted, provided that the above
|
|
//! copyright notice and this permission notice appear in all copies.
|
|
//!
|
|
//! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
//! REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
//! AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
//! INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
//! LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
//! OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
//! PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
const std = @import("std");
|
|
const Snowflake = @import("snowflake.zig").Snowflake;
|
|
const zjson = @import("../json.zig");
|
|
|
|
pub const PresenceStatus = enum {
|
|
online,
|
|
dnd,
|
|
idle,
|
|
offline,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/user#user-object-premium-types
|
|
pub const PremiumTypes = enum {
|
|
None,
|
|
NitroClassic,
|
|
Nitro,
|
|
NitroBasic,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/user#user-object-user-flags
|
|
pub const UserFlags = packed struct {
|
|
pub fn toRaw(self: UserFlags) u34 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u34) UserFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u34));
|
|
}
|
|
|
|
DiscordEmployee: bool = false,
|
|
PartneredServerOwner: bool = false,
|
|
HypeSquadEventsMember: bool = false,
|
|
BugHunterLevel1: bool = false,
|
|
MfaSms: bool = false,
|
|
PremiumPromoDismissed: bool = false,
|
|
HouseBravery: bool = false,
|
|
HouseBrilliance: bool = false,
|
|
HouseBalance: bool = false,
|
|
EarlySupporter: bool = false,
|
|
TeamUser: bool = false,
|
|
PartnerOrVerificationApplication: bool = false,
|
|
System: bool = false,
|
|
HasUnreadUrgentMessages: bool = false,
|
|
BugHunterLevel2: bool = false,
|
|
UnderageDeleted: bool = false,
|
|
VerifiedBot: bool = false,
|
|
EarlyVerifiedBotDeveloper: bool = false,
|
|
DiscordCertifiedModerator: bool = false,
|
|
BotHttpInteractions: bool = false,
|
|
Spammer: bool = false,
|
|
DisablePremium: bool = false,
|
|
ActiveDeveloper: bool = false,
|
|
_pad: u10 = 0,
|
|
Quarantined: bool = false,
|
|
};
|
|
|
|
pub const PremiumUsageFlags = packed struct {
|
|
pub fn toRaw(self: PremiumUsageFlags) u8 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u8) PremiumUsageFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u8));
|
|
}
|
|
|
|
PremiumDiscriminator: bool = false,
|
|
AnimatedAvatar: bool = false,
|
|
ProfileBanner: bool = false,
|
|
_pad: u5 = 0,
|
|
};
|
|
|
|
pub const PurchasedFlags = packed struct {
|
|
pub fn toRaw(self: PurchasedFlags) u8 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u8) PurchasedFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u8));
|
|
}
|
|
|
|
NitroClassic: bool = false,
|
|
Nitro: bool = false,
|
|
GuildBoost: bool = false,
|
|
NitroBasic: bool = false,
|
|
_pad: u4 = 0,
|
|
};
|
|
|
|
pub const MemberFlags = packed struct {
|
|
pub fn toRaw(self: MemberFlags) u16 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u16) MemberFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u16));
|
|
}
|
|
|
|
///
|
|
/// Member has left and rejoined the guild
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////Message
|
|
DidRejoin: bool = false,
|
|
///
|
|
/// Member has completed onboarding
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
CompletedOnboarding: bool = false,
|
|
/// Member is exempt from guild verification requirements
|
|
BypassesVerification: bool = false,
|
|
///
|
|
/// Member has started onboarding
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
StartedOnboarding: bool = false,
|
|
///
|
|
/// Member is a guest and can only access the voice channel they were invited to
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
IsGuest: bool = false,
|
|
///
|
|
/// Member has started Server Guide new member actions
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
StartedHomeActions: bool = false,
|
|
///
|
|
/// Member has completed Server Guide new member actions
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
CompletedHomeActions: bool = false,
|
|
///
|
|
/// Member's username, display name, or nickname is blocked by AutoMod
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
AutomodQuarantinedUsername: bool = false,
|
|
_pad: u1 = 0,
|
|
///
|
|
/// Member has dismissed the DM settings upsell
|
|
///
|
|
/// @remarks
|
|
/// This value is not editable
|
|
////
|
|
DmSettingsUpsellAcknowledged: bool = false,
|
|
_pad2: u6 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#channels-resource
|
|
pub const ChannelFlags = packed struct {
|
|
pub fn toRaw(self: ChannelFlags) u32 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u32) ChannelFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u32));
|
|
}
|
|
|
|
None: bool = false,
|
|
/// this thread is pinned to the top of its parent `GUILD_FORUM` channel
|
|
Pinned: bool = false,
|
|
_pad: u3 = 0,
|
|
/// Whether a tag is required to be specified when creating a thread in a `GUILD_FORUM` or a GUILD_MEDIA channel. Tags are specified in the `applied_tags` field.
|
|
RequireTag: bool = false,
|
|
_pad1: u11 = 0,
|
|
/// When set hides the embedded media download options. Available only for media channels.
|
|
HideMediaDownloadOptions: bool = false,
|
|
_pad2: u14,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/permissions#role-object-role-flags
|
|
pub const RoleFlags = packed struct {
|
|
pub fn toRaw(self: RoleFlags) u2 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u2) RoleFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u2));
|
|
}
|
|
|
|
None: bool = false,
|
|
/// Role can be selected by members in an onboarding prompt
|
|
InPrompt: bool = false,
|
|
};
|
|
|
|
pub const AttachmentFlags = packed struct {
|
|
pub fn toRaw(self: AttachmentFlags) u8 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u8) AttachmentFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u8));
|
|
}
|
|
|
|
None: bool = false,
|
|
_pad: u1 = 0,
|
|
/// This attachment has been edited using the remix feature on mobile
|
|
IsRemix: bool = false,
|
|
_pad1: u5 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/monetization/skus#sku-object-sku-flags
|
|
pub const SkuFlags = packed struct {
|
|
pub fn toRaw(self: SkuFlags) u16 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u16) SkuFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u16));
|
|
}
|
|
|
|
_pad: u2 = 0,
|
|
/// SKU is available for purchase
|
|
Available: bool = false,
|
|
_pad1: u5 = 0,
|
|
/// Recurring SKU that can be purchased by a user and applied to a single server. Grants access to every user in that server.
|
|
GuildSubscription: bool = false,
|
|
/// Recurring SKU purchased by a user for themselves. Grants access to the purchasing user in every server.
|
|
UserSubscription: bool = false,
|
|
_pad2: u6,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object-message-flags
|
|
pub const MessageFlags = packed struct {
|
|
pub fn toRaw(self: MessageFlags) u16 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u16) MessageFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u16));
|
|
}
|
|
|
|
/// This message has been published to subscribed channels (via Channel Following)
|
|
Crossposted: bool = false,
|
|
/// This message originated from a message in another channel (via Channel Following)
|
|
IsCrosspost: bool = false,
|
|
/// Do not include any embeds when serializing this message
|
|
SuppressEmbeds: bool = false,
|
|
/// The source message for this crosspost has been deleted (via Channel Following)
|
|
SourceMessageDeleted: bool = false,
|
|
/// This message came from the urgent message system
|
|
Urgent: bool = false,
|
|
/// This message has an associated thread, with the same id as the message
|
|
HasThread: bool = false,
|
|
/// This message is only visible to the user who invoked the Interaction
|
|
Ephemeral: bool = false,
|
|
/// This message is an Interaction Response and the bot is "thinking"
|
|
Loading: bool = false,
|
|
/// This message failed to mention some roles and add their members to the thread
|
|
FailedToMentionSomeRolesInThread: bool = false,
|
|
_pad: u4 = 0,
|
|
/// This message will not trigger push and desktop notifications
|
|
SuppressNotifications: bool = false,
|
|
/// This message is a voice message
|
|
IsVoiceMessage: bool = false,
|
|
_pad1: u1 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-flags
|
|
pub const ActivityFlags = packed struct {
|
|
pub fn toRaw(self: MessageFlags) u16 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u16) MessageFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u16));
|
|
}
|
|
|
|
Instance: bool = false,
|
|
Join: bool = false,
|
|
Spectate: bool = false,
|
|
JoinRequest: bool = false,
|
|
Sync: bool = false,
|
|
Play: bool = false,
|
|
PartyPrivacyFriends: bool = false,
|
|
PartyPrivacyVoiceChannel: bool = false,
|
|
Embedded: bool = false,
|
|
_pad: u7 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#integration-object-integration-expire-behaviors
|
|
pub const IntegrationExpireBehaviors = enum {
|
|
RemoveRole,
|
|
Kick,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/teams#data-models-membership-state-enum
|
|
pub const TeamMembershipStates = enum(u4) {
|
|
Invited = 1,
|
|
Accepted = 2,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/oauth2#application-application-flags
|
|
pub const ApplicationFlags = packed struct {
|
|
pub fn toRaw(self: ApplicationFlags) u32 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u32) ApplicationFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u32));
|
|
}
|
|
|
|
_pad: u5 = 0,
|
|
/// Indicates if an app uses the Auto Moderation API.
|
|
ApplicationAutoModerationRuleCreateBadge: bool = false,
|
|
_pad1: u6 = 0,
|
|
/// Intent required for bots in **100 or more servers* /// to receive 'presence_update' events
|
|
GatewayPresence: bool = false,
|
|
/// Intent required for bots in under 100 servers to receive 'presence_update' events
|
|
GatewayPresenceLimited: bool = false,
|
|
/// Intent required for bots in **100 or more servers* /// to receive member-related events like 'guild_member_add'.
|
|
GatewayGuildMembers: bool = false,
|
|
/// Intent required for bots in under 100 servers to receive member-related events like 'guild_member_add'.
|
|
GatewayGuildMembersLimited: bool = false,
|
|
/// Indicates unusual growth of an app that prevents verification
|
|
VerificationPendingGuildLimit: bool = false,
|
|
/// Indicates if an app is embedded within the Discord client (currently unavailable publicly)
|
|
Embedded: bool = false,
|
|
/// Intent required for bots in **100 or more servers* /// to receive [message content](https://support-dev.discord.com/hc/en-us/articles/4404772028055)
|
|
GatewayMessageContent: bool = false,
|
|
/// Intent required for bots in under 100 servers to receive [message content](https://support-dev.discord.com/hc/en-us/articles/4404772028055), found in Bot Settings
|
|
GatewayMessageContentLimited: bool = false,
|
|
_pad2: u4 = 0,
|
|
/// Indicates if an app has registered global application commands
|
|
ApplicationCommandBadge: bool = false,
|
|
_pad3: u7,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/message-components#component-types
|
|
pub const MessageComponentTypes = enum(u4) {
|
|
/// A container for other components
|
|
ActionRow = 1,
|
|
/// A button object
|
|
Button,
|
|
/// A select menu for picking from choices
|
|
SelectMenu,
|
|
/// A text input object
|
|
InputText,
|
|
/// Select menu for users
|
|
SelectMenuUsers,
|
|
/// Select menu for roles
|
|
SelectMenuRoles,
|
|
/// Select menu for users and roles
|
|
SelectMenuUsersAndRoles,
|
|
/// Select menu for channels
|
|
SelectMenuChannels,
|
|
};
|
|
|
|
pub const TextStyles = enum(u4) {
|
|
/// Intended for short single-line text
|
|
Short = 1,
|
|
/// Intended for much longer inputs
|
|
Paragraph = 2,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/message-components#buttons-button-styles
|
|
pub const ButtonStyles = enum(u4) {
|
|
/// A blurple button
|
|
Primary = 1,
|
|
/// A grey button
|
|
Secondary,
|
|
/// A green button
|
|
Success,
|
|
/// A red button
|
|
Danger,
|
|
/// A button that navigates to a URL
|
|
Link,
|
|
/// A blurple button to show a Premium item in the shop
|
|
Premium,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#allowed-mentions-object-allowed-mention-types
|
|
pub const AllowedMentionsTypes = enum {
|
|
/// Controls role mentions
|
|
roles,
|
|
/// Controls user mentions
|
|
users,
|
|
/// Controls \@everyone and \@here mentions
|
|
everyone,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/webhook#webhook-object-webhook-types
|
|
pub const WebhookTypes = enum(u4) {
|
|
/// Incoming Webhooks can post messages to channels with a generated token
|
|
Incoming = 1,
|
|
/// Channel Follower Webhooks are internal webhooks used with Channel Following to post new messages into channels
|
|
ChannelFollower,
|
|
/// Application webhooks are webhooks used with Interactions
|
|
Application,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#embed-object-embed-types
|
|
/// perhaps union?
|
|
pub const EmbedTypes = enum {
|
|
rich,
|
|
image,
|
|
video,
|
|
gifv,
|
|
article,
|
|
link,
|
|
poll_res,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-default-message-notification-level
|
|
pub const DefaultMessageNotificationLevels = enum {
|
|
/// Members will receive notifications for all messages by default
|
|
AllMessages,
|
|
/// Members will receive notifications only for messages that \@mention them by default
|
|
OnlyMentions,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-explicit-content-filter-level
|
|
pub const ExplicitContentFilterLevels = enum {
|
|
/// Media content will not be scanned
|
|
Disabled,
|
|
/// Media content sent by members without roles will be scanned
|
|
MembersWithoutRoles,
|
|
/// Media content sent by all members will be scanned
|
|
AllMembers,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-verification-level
|
|
pub const VerificationLevels = enum {
|
|
/// Unrestricted
|
|
None,
|
|
/// Must have verified email on account
|
|
Low,
|
|
/// Must be registered on Discord for longer than 5 minutes
|
|
Medium,
|
|
/// Must be a member of the server for longer than 10 minutes
|
|
High,
|
|
/// Must have a verified phone number
|
|
VeryHigh,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-guild-features
|
|
pub const GuildFeatures = enum {
|
|
/// Guild has access to set an invite splash background
|
|
INVITE_SPLASH,
|
|
/// Guild has access to set a vanity URL
|
|
VANITY_URL,
|
|
/// Guild is verified
|
|
VERIFIED,
|
|
/// Guild is partnered
|
|
PARTNERED,
|
|
/// Guild can enable welcome screen, Membership Screening, stage channels and discovery, and receives community updates
|
|
COMMUNITY,
|
|
/// Guild has enabled monetization.
|
|
CREATOR_MONETIZABLE_PROVISIONAL,
|
|
/// Guild has enabled the role subscription promo page.
|
|
CREATOR_STORE_PAGE,
|
|
/// Guild has been set as a support server on the App Directory
|
|
DEVELOPER_SUPPORT_SERVER,
|
|
/// Guild has access to create news channels
|
|
NEWS,
|
|
/// Guild is able to be discovered in the directory
|
|
DISCOVERABLE,
|
|
/// Guild is able to be featured in the directory
|
|
FEATURABLE,
|
|
/// Guild has access to set an animated guild icon
|
|
ANIMATED_ICON,
|
|
/// Guild has access to set a guild banner image
|
|
BANNER,
|
|
/// Guild has enabled the welcome screen
|
|
WELCOME_SCREEN_ENABLED,
|
|
/// Guild has enabled [Membership Screening](https://discord.com/developers/docs/resources/guild#membership-screening-object)
|
|
MEMBER_VERIFICATION_GATE_ENABLED,
|
|
/// Guild can be previewed before joining via Membership Screening or the directory
|
|
PREVIEW_ENABLED,
|
|
/// Guild has enabled ticketed events
|
|
TICKETED_EVENTS_ENABLED,
|
|
/// Guild has increased custom sticker slots
|
|
MORE_STICKERS,
|
|
/// Guild is able to set role icons
|
|
ROLE_ICONS,
|
|
/// Guild has role subscriptions that can be purchased.
|
|
ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE,
|
|
/// Guild has enabled role subscriptions.
|
|
ROLE_SUBSCRIPTIONS_ENABLED,
|
|
/// Guild has set up auto moderation rules
|
|
AUTO_MODERATION,
|
|
/// Guild has paused invites, preventing new users from joining
|
|
INVITES_DISABLED,
|
|
/// Guild has access to set an animated guild banner image
|
|
ANIMATED_BANNER,
|
|
/// Guild has disabled alerts for join raids in the configured safety alerts channel
|
|
RAID_ALERTS_DISABLED,
|
|
/// Guild is using the old permissions configuration behavior
|
|
APPLICATION_COMMAND_PERMISSIONS_V2,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-mfa-level
|
|
pub const MfaLevels = enum {
|
|
/// Guild has no MFA/2FA requirement for moderation actions
|
|
None,
|
|
/// Guild has a 2FA requirement for moderation actions
|
|
Elevated,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-system-channel-flags
|
|
pub const SystemChannelFlags = packed struct {
|
|
pub fn toRaw(self: SystemChannelFlags) u8 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u8) SystemChannelFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u8));
|
|
}
|
|
|
|
/// Suppress member join notifications
|
|
SuppressJoinNotifications: bool = false,
|
|
/// Suppress server boost notifications
|
|
SuppressPremiumSubscriptions: bool = false,
|
|
/// Suppress server setup tips
|
|
SuppressGuildReminderNotifications: bool = false,
|
|
/// Hide member join sticker reply buttons
|
|
SuppressJoinNotificationReplies: bool = false,
|
|
_pad: u4 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-premium-tier
|
|
pub const PremiumTiers = enum {
|
|
/// Guild has not unlocked any Server Boost perks
|
|
None,
|
|
/// Guild has unlocked Server Boost level 1 perks
|
|
Tier1,
|
|
/// Guild has unlocked Server Boost level 2 perks
|
|
Tier2,
|
|
/// Guild has unlocked Server Boost level 3 perks
|
|
Tier3,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/guild#guild-object-guild-nsfw-level
|
|
pub const GuildNsfwLevel = enum {
|
|
Default,
|
|
Explicit,
|
|
Safe,
|
|
AgeRestricted,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#channel-object-channel-types
|
|
pub const ChannelTypes = packed struct {
|
|
pub fn toRaw(self: ChannelTypes) u32 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u32) ChannelTypes {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u32));
|
|
}
|
|
|
|
/// A text channel within a server
|
|
GuildText: bool = false,
|
|
/// A direct message between users
|
|
DM: bool = false,
|
|
/// A voice channel within a server
|
|
GuildVoice: bool = false,
|
|
/// A direct message between multiple users
|
|
GroupDm: bool = false,
|
|
/// An organizational category that contains up to 50 channels
|
|
GuildCategory: bool = false,
|
|
/// A channel that users can follow and crosspost into their own server
|
|
GuildAnnouncement: bool = false,
|
|
_pad: u4 = 0,
|
|
/// A temporary sub-channel within a GUILD_ANNOUNCEMENT channel
|
|
AnnouncementThread: bool = false,
|
|
/// A temporary sub-channel within a GUILD_TEXT or GUILD_FORUM channel
|
|
PublicThread: bool = false,
|
|
/// A temporary sub-channel within a GUILD_TEXT channel that is only viewable by those invited and those with the MANAGE_THREADS permission
|
|
PrivateThread: bool = false,
|
|
/// A voice channel for hosting events with an audience
|
|
GuildStageVoice: bool = false,
|
|
/// A channel in a hub containing the listed servers
|
|
GuildDirectory: bool = false,
|
|
/// A channel which can only contains threads
|
|
GuildForum: bool = false,
|
|
/// Channel that can only contain threads, similar to GUILD_FORUM channels
|
|
GuildMedia: bool = false,
|
|
_pad1: u15 = 0,
|
|
};
|
|
|
|
pub const OverwriteTypes = enum {
|
|
Role,
|
|
Member,
|
|
};
|
|
|
|
pub const VideoQualityModes = enum(u4) {
|
|
/// Discord chooses the quality for optimal performance
|
|
Auto = 1,
|
|
/// 720p
|
|
Full,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/gateway-events#activity-object-activity-types
|
|
pub const ActivityTypes = enum(u4) {
|
|
Playing = 0,
|
|
Streaming = 1,
|
|
Listening = 2,
|
|
Watching = 3,
|
|
Custom = 4,
|
|
Competing = 5,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object-message-types
|
|
pub const MessageTypes = enum(u8) {
|
|
Default,
|
|
RecipientAdd,
|
|
RecipientRemove,
|
|
Call,
|
|
ChannelNameChange,
|
|
ChannelIconChange,
|
|
ChannelPinnedMessage,
|
|
UserJoin,
|
|
GuildBoost,
|
|
GuildBoostTier1,
|
|
GuildBoostTier2,
|
|
GuildBoostTier3,
|
|
ChannelFollowAdd,
|
|
GuildDiscoveryDisqualified = 14,
|
|
GuildDiscoveryRequalified,
|
|
GuildDiscoveryGracePeriodInitialWarning,
|
|
GuildDiscoveryGracePeriodFinalWarning,
|
|
ThreadCreated,
|
|
Reply,
|
|
ChatInputCommand,
|
|
ThreadStarterMessage,
|
|
GuildInviteReminder,
|
|
ContextMenuCommand,
|
|
AutoModerationAction,
|
|
RoleSubscriptionPurchase,
|
|
InteractionPremiumUpsell,
|
|
StageStart,
|
|
StageEnd,
|
|
StageSpeaker,
|
|
StageTopic = 31,
|
|
GuildApplicationPremiumSubscription,
|
|
GuildIncidentAlertModeEnabled = 36,
|
|
GuildIncidentAlertModeDisabled,
|
|
GuildIncidentReportRaid,
|
|
GuildIncidentReportFalseAlarm,
|
|
PurchaseNotification = 44,
|
|
PollResult = 46,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/channel#message-object-message-activity-types
|
|
pub const MessageActivityTypes = enum(u4) {
|
|
Join = 1,
|
|
Spectate = 2,
|
|
Listen = 3,
|
|
JoinRequest = 5,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-types
|
|
pub const StickerTypes = enum(u4) {
|
|
/// an official sticker in a pack
|
|
Standard = 1,
|
|
/// a sticker uploaded to a guild for the guild's members
|
|
Guild = 2,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types
|
|
pub const StickerFormatTypes = enum(u4) {
|
|
Png = 1,
|
|
APng,
|
|
Lottie,
|
|
Gif,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/slash-commands#interaction-interactiontype
|
|
pub const InteractionTypes = enum(u4) {
|
|
Ping = 1,
|
|
ApplicationCommand = 2,
|
|
MessageComponent = 3,
|
|
ApplicationCommandAutocomplete = 4,
|
|
ModalSubmit = 5,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/slash-commands#applicationcommandoptiontype
|
|
pub const ApplicationCommandOptionTypes = enum(u4) {
|
|
SubCommand = 1,
|
|
SubCommandGroup,
|
|
String,
|
|
Integer,
|
|
Boolean,
|
|
User,
|
|
Channel,
|
|
Role,
|
|
Mentionable,
|
|
Number,
|
|
Attachment,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/audit-log#audit-log-entry-object-audit-log-events
|
|
pub const AuditLogEvents = enum(u4) {
|
|
/// Server settings were updated
|
|
GuildUpdate = 1,
|
|
/// Channel was created
|
|
ChannelCreate = 10,
|
|
/// Channel settings were updated
|
|
ChannelUpdate,
|
|
/// Channel was deleted
|
|
ChannelDelete,
|
|
/// Permission overwrite was added to a channel
|
|
ChannelOverwriteCreate,
|
|
/// Permission overwrite was updated for a channel
|
|
ChannelOverwriteUpdate,
|
|
/// Permission overwrite was deleted from a channel
|
|
ChannelOverwriteDelete,
|
|
/// Member was removed from server
|
|
MemberKick = 20,
|
|
/// Members were pruned from server
|
|
MemberPrune,
|
|
/// Member was banned from server
|
|
MemberBanAdd,
|
|
/// Server ban was lifted for a member
|
|
MemberBanRemove,
|
|
/// Member was updated in server
|
|
MemberUpdate,
|
|
/// Member was added or removed from a role
|
|
MemberRoleUpdate,
|
|
/// Member was moved to a different voice channel
|
|
MemberMove,
|
|
/// Member was disconnected from a voice channel
|
|
MemberDisconnect,
|
|
/// Bot user was added to server
|
|
BotAdd,
|
|
/// Role was created
|
|
RoleCreate = 30,
|
|
/// Role was edited
|
|
RoleUpdate,
|
|
/// Role was deleted
|
|
RoleDelete,
|
|
/// Server invite was created
|
|
InviteCreate = 40,
|
|
/// Server invite was updated
|
|
InviteUpdate,
|
|
/// Server invite was deleted
|
|
InviteDelete,
|
|
/// Webhook was created
|
|
WebhookCreate = 50,
|
|
/// Webhook properties or channel were updated
|
|
WebhookUpdate,
|
|
/// Webhook was deleted
|
|
WebhookDelete,
|
|
/// Emoji was created
|
|
EmojiCreate = 60,
|
|
/// Emoji name was updated
|
|
EmojiUpdate,
|
|
/// Emoji was deleted
|
|
EmojiDelete,
|
|
/// Single message was deleted
|
|
MessageDelete = 72,
|
|
/// Multiple messages were deleted
|
|
MessageBulkDelete,
|
|
/// Messaged was pinned to a channel
|
|
MessagePin,
|
|
/// Message was unpinned from a channel
|
|
MessageUnpin,
|
|
/// App was added to server
|
|
IntegrationCreate = 80,
|
|
/// App was updated (as an example, its scopes were updated)
|
|
IntegrationUpdate,
|
|
/// App was removed from server
|
|
IntegrationDelete,
|
|
/// Stage instance was created (stage channel becomes live)
|
|
StageInstanceCreate,
|
|
/// Stage instace details were updated
|
|
StageInstanceUpdate,
|
|
/// Stage instance was deleted (stage channel no longer live)
|
|
StageInstanceDelete,
|
|
/// Sticker was created
|
|
StickerCreate = 90,
|
|
/// Sticker details were updated
|
|
StickerUpdate,
|
|
/// Sticker was deleted
|
|
StickerDelete,
|
|
/// Event was created
|
|
GuildScheduledEventCreate = 100,
|
|
/// Event was updated
|
|
GuildScheduledEventUpdate,
|
|
/// Event was cancelled
|
|
GuildScheduledEventDelete,
|
|
/// Thread was created in a channel
|
|
ThreadCreate = 110,
|
|
/// Thread was updated
|
|
ThreadUpdate,
|
|
/// Thread was deleted
|
|
ThreadDelete,
|
|
/// Permissions were updated for a command
|
|
ApplicationCommandPermissionUpdate = 121,
|
|
/// Auto moderation rule was created
|
|
AutoModerationRuleCreate = 140,
|
|
/// Auto moderation rule was updated
|
|
AutoModerationRuleUpdate,
|
|
/// Auto moderation rule was deleted
|
|
AutoModerationRuleDelete,
|
|
/// Message was blocked by AutoMod according to a rule.
|
|
AutoModerationBlockMessage,
|
|
/// Message was flagged by AutoMod
|
|
AudoModerationFlagMessage,
|
|
/// Member was timed out by AutoMod
|
|
AutoModerationMemberTimedOut,
|
|
/// Creator monetization request was created
|
|
CreatorMonetizationRequestCreated = 150,
|
|
/// Creator monetization terms were accepted
|
|
CreatorMonetizationTermsAccepted,
|
|
/// Guild Onboarding Question was created
|
|
OnBoardingPromptCreate = 163,
|
|
/// Guild Onboarding Question was updated
|
|
OnBoardingPromptUpdate,
|
|
/// Guild Onboarding Question was deleted
|
|
OnBoardingPromptDelete,
|
|
/// Guild Onboarding was created
|
|
OnBoardingCreate,
|
|
/// Guild Onboarding was updated
|
|
OnBoardingUpdate,
|
|
/// Guild Server Guide was created
|
|
HomeSettingsCreate = 190,
|
|
/// Guild Server Guide was updated
|
|
HomeSettingsUpdate,
|
|
};
|
|
|
|
pub const ScheduledEventPrivacyLevel = enum(u4) {
|
|
/// the scheduled event is only accessible to guild members
|
|
GuildOnly = 2,
|
|
};
|
|
|
|
pub const ScheduledEventEntityType = enum(u4) {
|
|
StageInstance = 1,
|
|
Voice,
|
|
External,
|
|
};
|
|
|
|
pub const ScheduledEventStatus = enum(u4) {
|
|
Scheduled = 1,
|
|
Active,
|
|
Completed,
|
|
Canceled,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/resources/invite#invite-object-target-user-types
|
|
pub const TargetTypes = enum(u4) {
|
|
Stream = 1,
|
|
EmbeddedApplication,
|
|
};
|
|
|
|
pub const ApplicationCommandTypes = enum(u4) {
|
|
/// A text-based command that shows up when a user types `/`
|
|
ChatInput = 1,
|
|
/// A UI-based command that shows up when you right click or tap on a user
|
|
User,
|
|
/// A UI-based command that shows up when you right click or tap on a message
|
|
Message,
|
|
/// A UI-based command that represents the primary way to invoke an app's Activity
|
|
PrimaryEntryPoint,
|
|
};
|
|
|
|
pub const ApplicationCommandPermissionTypes = enum(u4) {
|
|
Role = 1,
|
|
User,
|
|
Channel,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/permissions#permissions-bitwise-permission-flags
|
|
/// Permissions v2
|
|
pub const BitwisePermissionFlags = packed struct {
|
|
pub fn toRaw(self: BitwisePermissionFlags) u64 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u64) BitwisePermissionFlags {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u64));
|
|
}
|
|
|
|
/// Allows creation of instant invites
|
|
CREATE_INSTANT_INVITE: bool = false,
|
|
/// Allows kicking members
|
|
KICK_MEMBERS: bool = false,
|
|
/// Allows banning members
|
|
BAN_MEMBERS: bool = false,
|
|
/// Allows all permissions and bypasses channel permission overwrites
|
|
ADMINISTRATOR: bool = false,
|
|
/// Allows management and editing of channels
|
|
MANAGE_CHANNELS: bool = false,
|
|
/// Allows management and editing of the guild
|
|
MANAGE_GUILD: bool = false,
|
|
/// Allows for the addition of reactions to messages
|
|
ADD_REACTIONS: bool = false,
|
|
/// Allows for viewing of audit logs
|
|
VIEW_AUDIT_LOG: bool = false,
|
|
/// Allows for using priority speaker in a voice channel
|
|
PRIORITY_SPEAKER: bool = false,
|
|
/// Allows the user to go live
|
|
STREAM: bool = false,
|
|
/// Allows guild members to view a channel, which includes reading messages in text channels and joining voice channels
|
|
VIEW_CHANNEL: bool = false,
|
|
/// Allows for sending messages in a channel. (does not allow sending messages in threads)
|
|
SEND_MESSAGES: bool = false,
|
|
/// Allows for sending of /tts messages
|
|
SEND_TTS_MESSAGES: bool = false,
|
|
/// Allows for deletion of other users messages
|
|
MANAGE_MESSAGES: bool = false,
|
|
/// Links sent by users with this permission will be auto-embedded
|
|
EMBED_LINKS: bool = false,
|
|
/// Allows for uploading images and files
|
|
ATTACH_FILES: bool = false,
|
|
/// Allows for reading of message history
|
|
READ_MESSAGE_HISTORY: bool = false,
|
|
/// Allows for using the \@everyone tag to notify all users in a channel, and the \@here tag to notify all online users in a channel
|
|
MENTION_EVERYONE: bool = false,
|
|
/// Allows the usage of custom emojis from other servers
|
|
USE_EXTERNAL_EMOJIS: bool = false,
|
|
/// Allows for viewing guild insights
|
|
VIEW_GUILD_INSIGHTS: bool = false,
|
|
/// Allows for joining of a voice channel
|
|
CONNECT: bool = false,
|
|
/// Allows for speaking in a voice channel
|
|
SPEAK: bool = false,
|
|
/// Allows for muting members in a voice channel
|
|
MUTE_MEMBERS: bool = false,
|
|
/// Allows for deafening of members in a voice channel
|
|
DEAFEN_MEMBERS: bool = false,
|
|
/// Allows for moving of members between voice channels
|
|
MOVE_MEMBERS: bool = false,
|
|
/// Allows for using voice-activity-detection in a voice channel
|
|
USE_VAD: bool = false,
|
|
/// Allows for modification of own nickname
|
|
CHANGE_NICKNAME: bool = false,
|
|
/// Allows for modification of other users nicknames
|
|
MANAGE_NICKNAMES: bool = false,
|
|
/// Allows management and editing of roles
|
|
MANAGE_ROLES: bool = false,
|
|
/// Allows management and editing of webhooks
|
|
MANAGE_WEBHOOKS: bool = false,
|
|
/// Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users
|
|
MANAGE_GUILD_EXPRESSIONS: bool = false,
|
|
/// Allows members to use application commands in text channels
|
|
USE_SLASH_COMMANDS: bool = false,
|
|
/// Allows for requesting to speak in stage channels.
|
|
REQUEST_TO_SPEAK: bool = false,
|
|
/// Allows for editing and deleting scheduled events created by all users
|
|
MANAGE_EVENTS: bool = false,
|
|
/// Allows for deleting and archiving threads, and viewing all private threads
|
|
MANAGE_THREADS: bool = false,
|
|
/// Allows for creating public and announcement threads
|
|
CREATE_PUBLIC_THREADS: bool = false,
|
|
/// Allows for creating private threads
|
|
CREATE_PRIVATE_THREADS: bool = false,
|
|
/// Allows the usage of custom stickers from other servers
|
|
USE_EXTERNAL_STICKERS: bool = false,
|
|
/// Allows for sending messages in threads
|
|
SEND_MESSAGES_IN_THREADS: bool = false,
|
|
/// Allows for launching activities (applications with the `EMBEDDED` flag) in a voice channel.
|
|
USE_EMBEDDED_ACTIVITIES: bool = false,
|
|
/// Allows for timing out users to prevent them from sending or reacting to messages in chat and threads, and from speaking in voice and stage channels
|
|
MODERATE_MEMBERS: bool = false,
|
|
/// Allows for viewing role subscription insights.
|
|
VIEW_CREATOR_MONETIZATION_ANALYTICS: bool = false,
|
|
/// Allows for using soundboard in a voice channel.
|
|
USE_SOUNDBOARD: bool = false,
|
|
/// Allows for creating emojis, stickers, and soundboard sounds, and editing and deleting those created by the current user
|
|
CREATE_GUILD_EXPRESSIONS: bool = false,
|
|
/// Allows for creating scheduled events, and editing and deleting those created by the current user
|
|
CREATE_EVENTS: bool = false,
|
|
/// Allows the usage of custom soundboards sounds from other servers
|
|
USE_EXTERNAL_SOUNDS: bool = false,
|
|
/// Allows sending voice messages
|
|
SEND_VOICE_MESSAGES: bool = false,
|
|
/// Allows sending polls
|
|
SEND_POLLS: bool = false,
|
|
/// Allows user-installed apps to send public responses. When disabled, users will still be allowed to use their apps but the responses will be ephemeral. This only applies to apps not also installed to the server.
|
|
USE_EXTERNAL_APPS: bool = false,
|
|
_pad: u15 = 0,
|
|
};
|
|
|
|
pub const PermissionStrings = union(enum) {
|
|
/// Allows creation of instant invites
|
|
CREATE_INSTANT_INVITE,
|
|
/// Allows kicking members
|
|
KICK_MEMBERS,
|
|
/// Allows banning members
|
|
BAN_MEMBERS,
|
|
/// Allows all permissions and bypasses channel permission overwrites
|
|
ADMINISTRATOR,
|
|
/// Allows management and editing of channels
|
|
MANAGE_CHANNELS,
|
|
/// Allows management and editing of the guild
|
|
MANAGE_GUILD,
|
|
/// Allows for the addition of reactions to messages
|
|
ADD_REACTIONS,
|
|
/// Allows for viewing of audit logs
|
|
VIEW_AUDIT_LOG,
|
|
/// Allows for using priority speaker in a voice channel
|
|
PRIORITY_SPEAKER,
|
|
/// Allows the user to go live
|
|
STREAM,
|
|
/// Allows guild members to view a channel, which includes reading messages in text channels and joining voice channels
|
|
VIEW_CHANNEL,
|
|
/// Allows for sending messages in a channel. (does not allow sending messages in threads)
|
|
SEND_MESSAGES,
|
|
/// Allows for sending of /tts messages
|
|
SEND_TTS_MESSAGES,
|
|
/// Allows for deletion of other users messages
|
|
MANAGE_MESSAGES,
|
|
/// Links sent by users with this permission will be auto-embedded
|
|
EMBED_LINKS,
|
|
/// Allows for uploading images and files
|
|
ATTACH_FILES,
|
|
/// Allows for reading of message history
|
|
READ_MESSAGE_HISTORY,
|
|
/// Allows for using the \@everyone tag to notify all users in a channel, and the \@here tag to notify all online users in a channel
|
|
MENTION_EVERYONE,
|
|
/// Allows the usage of custom emojis from other servers
|
|
USE_EXTERNAL_EMOJIS,
|
|
/// Allows for viewing guild insights
|
|
VIEW_GUILD_INSIGHTS,
|
|
/// Allows for joining of a voice channel
|
|
CONNECT,
|
|
/// Allows for speaking in a voice channel
|
|
SPEAK,
|
|
/// Allows for muting members in a voice channel
|
|
MUTE_MEMBERS,
|
|
/// Allows for deafening of members in a voice channel
|
|
DEAFEN_MEMBERS,
|
|
/// Allows for moving of members between voice channels
|
|
MOVE_MEMBERS,
|
|
/// Allows for using voice-activity-detection in a voice channel
|
|
USE_VAD,
|
|
/// Allows for modification of own nickname
|
|
CHANGE_NICKNAME,
|
|
/// Allows for modification of other users nicknames
|
|
MANAGE_NICKNAMES,
|
|
/// Allows management and editing of roles
|
|
MANAGE_ROLES,
|
|
/// Allows management and editing of webhooks
|
|
MANAGE_WEBHOOKS,
|
|
/// Allows for editing and deleting emojis, stickers, and soundboard sounds created by all users
|
|
MANAGE_GUILD_EXPRESSIONS,
|
|
/// Allows members to use application commands in text channels
|
|
USE_SLASH_COMMANDS,
|
|
/// Allows for requesting to speak in stage channels.
|
|
REQUEST_TO_SPEAK,
|
|
/// Allows for editing and deleting scheduled events created by all users
|
|
MANAGE_EVENTS,
|
|
/// Allows for deleting and archiving threads, and viewing all private threads
|
|
MANAGE_THREADS,
|
|
/// Allows for creating public and announcement threads
|
|
CREATE_PUBLIC_THREADS,
|
|
/// Allows for creating private threads
|
|
CREATE_PRIVATE_THREADS,
|
|
/// Allows the usage of custom stickers from other servers
|
|
USE_EXTERNAL_STICKERS,
|
|
/// Allows for sending messages in threads
|
|
SEND_MESSAGES_IN_THREADS,
|
|
/// Allows for launching activities (applications with the `EMBEDDED` flag) in a voice channel.
|
|
USE_EMBEDDED_ACTIVITIES,
|
|
/// Allows for timing out users to prevent them from sending or reacting to messages in chat and threads, and from speaking in voice and stage channels
|
|
MODERATE_MEMBERS,
|
|
/// Allows for viewing role subscription insights.
|
|
VIEW_CREATOR_MONETIZATION_ANALYTICS,
|
|
/// Allows for using soundboard in a voice channel.
|
|
USE_SOUNDBOARD,
|
|
/// Allows for creating emojis, stickers, and soundboard sounds, and editing and deleting those created by the current user
|
|
CREATE_GUILD_EXPRESSIONS,
|
|
/// Allows for creating scheduled events, and editing and deleting those created by the current user
|
|
CREATE_EVENTS,
|
|
/// Allows the usage of custom soundboards sounds from other servers
|
|
USE_EXTERNAL_SOUNDS,
|
|
/// Allows sending voice messages
|
|
SEND_VOICE_MESSAGES,
|
|
/// Allows sending polls
|
|
SEND_POLLS,
|
|
/// Allows user-installed apps to send public responses. When disabled, users will still be allowed to use their apps but the responses will be ephemeral. This only applies to apps not also installed to the server.
|
|
USE_EXTERNAL_APPS,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/opcodes-and-status-codes#opcodes-and-status-codes
|
|
pub const GatewayCloseEventCodes = enum(u16) {
|
|
/// A normal closure of the gateway. You may attempt to reconnect.
|
|
NormalClosure = 1000,
|
|
/// We're not sure what went wrong. Try reconnecting?
|
|
UnknownError = 4000,
|
|
/// You sent an invalid [Gateway opcode](https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes) or an invalid payload for an opcode. Don't do that!
|
|
UnknownOpcode,
|
|
/// You sent an invalid [payload](https://discord.com/developers/docs/topics/gateway#sending-payloads) to us. Don't do that!
|
|
DecodeError,
|
|
/// You sent us a payload prior to [identifying](https://discord.com/developers/docs/topics/gateway-events#identify), or this session has been invalidated.
|
|
NotAuthenticated,
|
|
/// The account token sent with your [identify payload](https://discord.com/developers/docs/topics/gateway-events#identify) is incorrect.
|
|
AuthenticationFailed,
|
|
/// You sent more than one identify payload. Don't do that!
|
|
AlreadyAuthenticated,
|
|
/// The sequence sent when [resuming](https://discord.com/developers/docs/topics/gateway-events#resume) the session was invalid. Reconnect and start a new session.
|
|
InvalidSeq = 4007,
|
|
/// Woah nelly! You're sending payloads to us too quickly. Slow it down! You will be disconnected on receiving this.
|
|
RateLimited,
|
|
/// Your session timed out. Reconnect and start a new one.
|
|
SessionTimedOut,
|
|
/// You sent us an invalid [shard when identifying](https://discord.com/developers/docs/topics/gateway#sharding).
|
|
InvalidShard,
|
|
/// The session would have handled too many guilds - you are required to [shard](https://discord.com/developers/docs/topics/gateway#sharding) your connection in order to connect.
|
|
ShardingRequired,
|
|
/// You sent an invalid version for the gateway.
|
|
InvalidApiVersion,
|
|
/// You sent an invalid intent for a [Gateway Intent](https://discord.com/developers/docs/topics/gateway#gateway-intents). You may have incorrectly calculated the bitwise value.
|
|
InvalidIntents,
|
|
/// You sent a disallowed intent for a [Gateway Intent](https://discord.com/developers/docs/topics/gateway#gateway-intents). You may have tried to specify an intent that you [have not enabled or are not approved for](https://discord.com/developers/docs/topics/gateway#privileged-intents).
|
|
DisallowedIntents,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/opcodes-and-status-codes#gateway-gateway-opcodes
|
|
pub const GatewayOpcodes = enum(u4) {
|
|
/// An event was dispatched.
|
|
Dispatch,
|
|
/// Fired periodically by the client to keep the connection alive.
|
|
Heartbeat,
|
|
/// Starts a new session during the initial handshake.
|
|
Identify,
|
|
/// Update the client's presence.
|
|
PresenceUpdate,
|
|
/// Used to join/leave or move between voice channels.
|
|
VoiceStateUpdate,
|
|
/// Resume a previous session that was disconnected.
|
|
Resume = 6,
|
|
/// You should attempt to reconnect and resume immediately.
|
|
Reconnect,
|
|
/// Request information about offline guild members in a large guild.
|
|
RequestGuildMembers,
|
|
/// The session has been invalidated. You should reconnect and identify/resume accordingly.
|
|
InvalidSession,
|
|
/// Sent immediately after connecting, contains the `heartbeat_interval` to use.
|
|
Hello,
|
|
/// Sent in response to receiving a heartbeat to acknowledge that it has been received.
|
|
HeartbeatACK,
|
|
};
|
|
|
|
pub const GatewayDispatchEventNames = union(enum) {
|
|
APPLICATION_COMMAND_PERMISSIONS_UPDATE,
|
|
AUTO_MODERATION_RULE_CREATE,
|
|
AUTO_MODERATION_RULE_UPDATE,
|
|
AUTO_MODERATION_RULE_DELETE,
|
|
AUTO_MODERATION_ACTION_EXECUTION,
|
|
CHANNEL_CREATE,
|
|
CHANNEL_UPDATE,
|
|
CHANNEL_DELETE,
|
|
CHANNEL_PINS_UPDATE,
|
|
THREAD_CREATE,
|
|
THREAD_UPDATE,
|
|
THREAD_DELETE,
|
|
THREAD_LIST_SYNC,
|
|
THREAD_MEMBER_UPDATE,
|
|
THREAD_MEMBERS_UPDATE,
|
|
GUILD_AUDIT_LOG_ENTRY_CREATE,
|
|
GUILD_CREATE,
|
|
GUILD_UPDATE,
|
|
GUILD_DELETE,
|
|
GUILD_BAN_ADD,
|
|
GUILD_BAN_REMOVE,
|
|
GUILD_EMOJIS_UPDATE,
|
|
GUILD_STICKERS_UPDATE,
|
|
GUILD_INTEGRATIONS_UPDATE,
|
|
GUILD_MEMBER_ADD,
|
|
GUILD_MEMBER_REMOVE,
|
|
GUILD_MEMBER_UPDATE,
|
|
GUILD_MEMBERS_CHUNK,
|
|
GUILD_ROLE_CREATE,
|
|
GUILD_ROLE_UPDATE,
|
|
GUILD_ROLE_DELETE,
|
|
GUILD_SCHEDULED_EVENT_CREATE,
|
|
GUILD_SCHEDULED_EVENT_UPDATE,
|
|
GUILD_SCHEDULED_EVENT_DELETE,
|
|
GUILD_SCHEDULED_EVENT_USER_ADD,
|
|
GUILD_SCHEDULED_EVENT_USER_REMOVE,
|
|
INTEGRATION_CREATE,
|
|
INTEGRATION_UPDATE,
|
|
INTEGRATION_DELETE,
|
|
INTERACTION_CREATE,
|
|
INVITE_CREATE,
|
|
INVITE_DELETE,
|
|
MESSAGE_CREATE,
|
|
MESSAGE_UPDATE,
|
|
MESSAGE_DELETE,
|
|
MESSAGE_DELETE_BULK,
|
|
MESSAGE_REACTION_ADD,
|
|
MESSAGE_REACTION_REMOVE,
|
|
MESSAGE_REACTION_REMOVE_ALL,
|
|
MESSAGE_REACTION_REMOVE_EMOJI,
|
|
PRESENCE_UPDATE,
|
|
STAGE_INSTANCE_CREATE,
|
|
STAGE_INSTANCE_UPDATE,
|
|
STAGE_INSTANCE_DELETE,
|
|
TYPING_START,
|
|
USER_UPDATE,
|
|
VOICE_CHANNEL_EFFECT_SEND,
|
|
VOICE_STATE_UPDATE,
|
|
VOICE_SERVER_UPDATE,
|
|
WEBHOOKS_UPDATE,
|
|
ENTITLEMENT_CREATE,
|
|
ENTITLEMENT_UPDATE,
|
|
ENTITLEMENT_DELETE,
|
|
MESSAGE_POLL_VOTE_ADD,
|
|
MESSAGE_POLL_VOTE_REMOVE,
|
|
|
|
READY,
|
|
RESUMED,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/gateway#list-of-intents
|
|
pub const GatewayIntents = packed struct {
|
|
pub fn toRaw(self: GatewayIntents) u32 {
|
|
return @bitCast(self);
|
|
}
|
|
|
|
pub fn fromRaw(raw: u32) GatewayIntents {
|
|
return @bitCast(raw);
|
|
}
|
|
|
|
pub fn json(_: std.mem.Allocator, value: zjson.JsonType) !@This() {
|
|
return @bitCast(value.number.cast(u32));
|
|
}
|
|
///
|
|
/// - GUILD_CREATE
|
|
/// - GUILD_UPDATE
|
|
/// - GUILD_DELETE
|
|
/// - GUILD_ROLE_CREATE
|
|
/// - GUILD_ROLE_UPDATE
|
|
/// - GUILD_ROLE_DELETE
|
|
/// - CHANNEL_CREATE
|
|
/// - CHANNEL_UPDATE
|
|
/// - CHANNEL_DELETE
|
|
/// - CHANNEL_PINS_UPDATE
|
|
/// - THREAD_CREATE
|
|
/// - THREAD_UPDATE
|
|
/// - THREAD_DELETE
|
|
/// - THREAD_LIST_SYNC
|
|
/// - THREAD_MEMBER_UPDATE
|
|
/// - THREAD_MEMBERS_UPDATE
|
|
/// - STAGE_INSTANCE_CREATE
|
|
/// - STAGE_INSTANCE_UPDATE
|
|
/// - STAGE_INSTANCE_DELETE
|
|
////
|
|
Guilds: bool = false,
|
|
///
|
|
/// - GUILD_MEMBER_ADD
|
|
/// - GUILD_MEMBER_UPDATE
|
|
/// - GUILD_MEMBER_REMOVE
|
|
/// - THREAD_MEMBERS_UPDATE
|
|
///
|
|
/// This is a privileged intent.
|
|
////
|
|
GuildMembers: bool = false,
|
|
///
|
|
/// - GUILD_AUDIT_LOG_ENTRY_CREATE
|
|
/// - GUILD_BAN_ADD
|
|
/// - GUILD_BAN_REMOVE
|
|
////
|
|
GuildModeration: bool = false,
|
|
///
|
|
/// - GUILD_EMOJIS_UPDATE
|
|
/// - GUILD_STICKERS_UPDATE
|
|
////
|
|
GuildEmojisAndStickers: bool = false,
|
|
///
|
|
/// - GUILD_INTEGRATIONS_UPDATE
|
|
/// - INTEGRATION_CREATE
|
|
/// - INTEGRATION_UPDATE
|
|
/// - INTEGRATION_DELETE
|
|
////
|
|
GuildIntegrations: bool = false,
|
|
///
|
|
/// - WEBHOOKS_UPDATE
|
|
////
|
|
GuildWebhooks: bool = false,
|
|
///
|
|
/// - INVITE_CREATE
|
|
/// - INVITE_DELETE
|
|
////
|
|
GuildInvites: bool = false,
|
|
///
|
|
/// - VOICE_STATE_UPDATE
|
|
/// - VOICE_CHANNEL_EFFECT_SEND
|
|
////
|
|
GuildVoiceStates: bool = false,
|
|
///
|
|
/// - PRESENCE_UPDATE
|
|
///
|
|
/// This is a privileged intent.
|
|
////
|
|
GuildPresences: bool = false,
|
|
///
|
|
/// - MESSAGE_CREATE
|
|
/// - MESSAGE_UPDATE
|
|
/// - MESSAGE_DELETE
|
|
/// - MESSAGE_DELETE_BULK
|
|
///
|
|
/// The messages do not contain content by default.
|
|
/// If you want to receive their content too, you need to turn on the privileged `MESSAGE_CONTENT` intent. */
|
|
GuildMessages: bool = false,
|
|
///
|
|
/// - MESSAGE_REACTION_ADD
|
|
/// - MESSAGE_REACTION_REMOVE
|
|
/// - MESSAGE_REACTION_REMOVE_ALL
|
|
/// - MESSAGE_REACTION_REMOVE_EMOJI
|
|
////
|
|
GuildMessageReactions: bool = false,
|
|
///
|
|
/// - TYPING_START
|
|
////
|
|
GuildMessageTyping: bool = false,
|
|
///
|
|
/// - CHANNEL_CREATE
|
|
/// - MESSAGE_CREATE
|
|
/// - MESSAGE_UPDATE
|
|
/// - MESSAGE_DELETE
|
|
/// - CHANNEL_PINS_UPDATE
|
|
////
|
|
DirectMessages: bool = false,
|
|
///
|
|
/// - MESSAGE_REACTION_ADD
|
|
/// - MESSAGE_REACTION_REMOVE
|
|
/// - MESSAGE_REACTION_REMOVE_ALL
|
|
/// - MESSAGE_REACTION_REMOVE_EMOJI
|
|
////
|
|
DirectMessageReactions: bool = false,
|
|
///
|
|
/// - TYPING_START
|
|
////
|
|
DirectMessageTyping: bool = false,
|
|
///
|
|
/// This intent will add all content related values to message events.
|
|
///
|
|
/// This is a privileged intent.
|
|
////
|
|
MessageContent: bool = false,
|
|
///
|
|
/// - GUILD_SCHEDULED_EVENT_CREATE
|
|
/// - GUILD_SCHEDULED_EVENT_UPDATE
|
|
/// - GUILD_SCHEDULED_EVENT_DELETE
|
|
/// - GUILD_SCHEDULED_EVENT_USER_ADD this is experimental and unstable.
|
|
/// - GUILD_SCHEDULED_EVENT_USER_REMOVE this is experimental and unstable.
|
|
////
|
|
GuildScheduledEvents: bool = false,
|
|
_pad: u4 = 0,
|
|
///
|
|
/// - AUTO_MODERATION_RULE_CREATE
|
|
/// - AUTO_MODERATION_RULE_UPDATE
|
|
/// - AUTO_MODERATION_RULE_DELETE
|
|
////
|
|
AutoModerationConfiguration: bool = false,
|
|
///
|
|
/// - AUTO_MODERATION_ACTION_EXECUTION
|
|
////
|
|
AutoModerationExecution: bool = false,
|
|
_pad2: u3 = 0,
|
|
///
|
|
/// - MESSAGE_POLL_VOTE_ADD
|
|
/// - MESSAGE_POLL_VOTE_REMOVE
|
|
////
|
|
GuildMessagePolls: bool = false,
|
|
///
|
|
/// - MESSAGE_POLL_VOTE_ADD
|
|
/// - MESSAGE_POLL_VOTE_REMOVE
|
|
////
|
|
DirectMessagePolls: bool = false,
|
|
_pad3: u4 = 0,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/gateway#list-of-intents
|
|
pub const Intents = GatewayIntents;
|
|
|
|
/// https://discord.com/developers/docs/interactions/slash-commands#interaction-response-interactionresponsetype
|
|
pub const InteractionResponseTypes = enum(u4) {
|
|
/// ACK a `Ping`
|
|
Pong = 1,
|
|
/// Respond to an interaction with a message
|
|
ChannelMessageWithSource = 4,
|
|
/// ACK an interaction and edit a response later, the user sees a loading state
|
|
DeferredChannelMessageWithSource = 5,
|
|
/// For components, ACK an interaction and edit the original message later; the user does not see a loading state
|
|
DeferredUpdateMessage = 6,
|
|
/// For components, edit the message the component was attached to
|
|
UpdateMessage = 7,
|
|
/// For Application Command Options, send an autocomplete result
|
|
ApplicationCommandAutocompleteResult = 8,
|
|
/// For Command or Component interactions, send a Modal response
|
|
Modal = 9,
|
|
///
|
|
/// Respond to an interaction with an upgrade button, only available for apps with monetization enabled
|
|
///
|
|
/// @deprecated You should migrate to the premium button components
|
|
PremiumRequired = 10,
|
|
///
|
|
/// Launch the Activity associated with the app.
|
|
///
|
|
/// @remarks
|
|
/// Only available for apps with Activities enabled
|
|
LaunchActivity = 12,
|
|
};
|
|
|
|
pub const SortOrderTypes = enum {
|
|
/// Sort forum posts by activity
|
|
LatestActivity,
|
|
/// Sort forum posts by creation time (from most recent to oldest)
|
|
CreationDate,
|
|
};
|
|
|
|
pub const ForumLayout = enum {
|
|
/// No default has been set for forum channel.
|
|
NotSet,
|
|
/// Display posts as a list.
|
|
ListView,
|
|
/// Display posts as a collection of tiles.
|
|
GalleryView,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/reference#image-formatting
|
|
/// json is only for stickers
|
|
pub const ImageFormat = union(enum) {
|
|
jpg,
|
|
jpeg,
|
|
png,
|
|
webp,
|
|
gif,
|
|
json,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/reference#image-formatting
|
|
pub const ImageSize = isize;
|
|
|
|
pub const Locales = union(enum) {
|
|
id,
|
|
da,
|
|
de,
|
|
@"en-GB",
|
|
@"en-US",
|
|
@"es-ES",
|
|
@"es-419",
|
|
fr,
|
|
hr,
|
|
it,
|
|
lt,
|
|
hu,
|
|
nl,
|
|
no,
|
|
pl,
|
|
@"pt-BR",
|
|
ro,
|
|
fi,
|
|
@"sv-SE",
|
|
vi,
|
|
tr,
|
|
cs,
|
|
el,
|
|
bg,
|
|
ru,
|
|
uk,
|
|
hi,
|
|
th,
|
|
@"zh-CN",
|
|
ja,
|
|
@"zh-TW",
|
|
ko,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/topics/oauth2#shared-resources-oauth2-scopes
|
|
pub const OAuth2Scope = union(enum) {
|
|
///
|
|
/// Allows your app to fetch data from a user's "Now Playing/Recently Played" list
|
|
///
|
|
/// @remarks
|
|
/// This scope is not currently available for apps
|
|
///
|
|
@"activities.read",
|
|
///
|
|
/// Allows your app to update a user's activity
|
|
///
|
|
/// @remarks
|
|
/// This scope not currently available for apps.
|
|
///
|
|
@"activities.write",
|
|
/// Allows your app to read build data for a user's applications
|
|
@"applications.builds.read",
|
|
///
|
|
/// Allows your app to upload/update builds for a user's applications
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"applications.builds.upload",
|
|
/// Allows your app to add commands to a guild - included by default with the `bot` scope
|
|
@"applications.commands",
|
|
///
|
|
/// Allows your app to update its Application Commands via this bearer token
|
|
///
|
|
/// @remarks
|
|
/// This scope can only be used when using a [Client Credential Grant](https://discord.com/developers/docs/topics/oauth2#client-credentials-grant)
|
|
///
|
|
@"applications.commands.update",
|
|
/// Allows your app to update permissions for its commands in a guild a user has permissions to
|
|
@"applications.commands.permissions.update",
|
|
/// Allows your app to read entitlements for a user's applications
|
|
@"applications.entitlements",
|
|
/// Allows your app to read and update store data (SKUs, store listings, achievements, etc.) for a user's applications
|
|
@"applications.store.update",
|
|
/// For oauth2 bots, this puts the bot in the user's selected guild by default
|
|
bot,
|
|
/// Allows requests to [/users/@me/connections](https://discord.com/developers/docs/resources/user#get-user-connections)
|
|
connections,
|
|
///
|
|
/// Allows your app to see information about the user's DMs and group DMs
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"dm_channels.read",
|
|
/// Adds the `email` filed to [/users/@me](https://discord.com/developers/docs/resources/user#get-current-user)
|
|
email,
|
|
/// Allows your app to join users to a group dm
|
|
@"gdm.join",
|
|
/// Allows requests to [/users/@me/guilds](https://discord.com/developers/docs/resources/user#get-current-user-guilds)
|
|
guilds,
|
|
/// Allows requests to [/guilds/{guild.id};/members/{user.id};](https://discord.com/developers/docs/resources/guild#add-guild-member)
|
|
@"guilds.join",
|
|
/// Allows requests to [/users/@me/guilds/{guild.id};/member](https://discord.com/developers/docs/resources/user#get-current-user-guild-member)
|
|
@"guilds.members.read",
|
|
///
|
|
/// Allows requests to [/users/@me](https://discord.com/developers/docs/resources/user#get-current-user)
|
|
///
|
|
/// @remarks
|
|
/// The return object from [/users/@me](https://discord.com/developers/docs/resources/user#get-current-user)
|
|
/// does NOT contain the `email` field unless the scope `email` is also used
|
|
///
|
|
identify,
|
|
///
|
|
/// For local rpc server api access, this allows you to read messages from all client channels
|
|
/// (otherwise restricted to channels/guilds your app creates)
|
|
///
|
|
@"messages.read",
|
|
///
|
|
/// Allows your app to know a user's friends and implicit relationships
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"relationships.read",
|
|
/// Allows your app to update a user's connection and metadata for the app
|
|
@"role_connections.write",
|
|
///
|
|
///For local rpc server access, this allows you to control a user's local client
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
rpc,
|
|
///
|
|
/// For local rpc server access, this allows you to update a user's activity
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"rpc.activities.write",
|
|
///
|
|
/// For local rpc server api access, this allows you to receive notifications pushed out to the user
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"rpc.notifications.read",
|
|
///
|
|
/// For local rpc server access, this allows you to read a user's voice settings and listen for voice events
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"rpc.voice.read",
|
|
///
|
|
/// For local rpc server access, this allows you to update a user's voice settings
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
@"rpc.voice.write",
|
|
///
|
|
/// Allows your app to connect to voice on user's behalf and see all the voice members
|
|
///
|
|
/// @remarks
|
|
///This scope requires approval to be used
|
|
///
|
|
voice,
|
|
/// Generate a webhook that is returned in the oauth token response for authorization code grants
|
|
@"webhook.incoming",
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/receiving-and-responding#interaction-object-interaction-context-types
|
|
pub const InteractionContextType = enum {
|
|
/// Interaction can be used within servers
|
|
Guild,
|
|
/// Interaction can be used within DMs with the app's bot user
|
|
BotDm,
|
|
/// Interaction can be used within Group DMs and DMs other than the app's bot user
|
|
PrivateChannel,
|
|
};
|