277 lines
14 KiB
Zig
277 lines
14 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 ApplicationCommandTypes = @import("shared.zig").ApplicationCommandTypes;
|
|
const InteractionContextType = @import("integration.zig").InteractionContextType;
|
|
const Snowflake = @import("snowflake.zig").Snowflake;
|
|
const ApplicationCommandPermissionTypes = @import("shared.zig").ApplicationCommandPermissionTypes;
|
|
const ApplicationIntegrationType = @import("application.zig").ApplicationIntegrationType;
|
|
const ApplicationCommandOptionTypes = @import("shared.zig").ApplicationCommandOptionTypes;
|
|
const ChannelTypes = @import("shared.zig").ChannelTypes;
|
|
|
|
/// https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-structure
|
|
pub const ApplicationCommand = struct {
|
|
/// Type of command, defaults to `ApplicationCommandTypes.ChatInput`
|
|
type: ?ApplicationCommandTypes = null,
|
|
///
|
|
/// Name of command, 1-32 characters.
|
|
/// `ApplicationCommandTypes.ChatInput` command names must match the following regex `^[-_\p{L};\p{N};\p{sc=Deva};\p{sc=Thai};]{1,32};$` with the unicode flag set.
|
|
/// If there is a lowercase variant of any letters used, you must use those.
|
|
/// Characters with no lowercase variants and/or uncased letters are still allowed.
|
|
/// ApplicationCommandTypes.User` and `ApplicationCommandTypes.Message` commands may be mixed case and can include spaces.
|
|
///
|
|
name: []const u8,
|
|
/// Localization object for `name` field. Values follow the same restrictions as `name`
|
|
name_localizations: ?[]const u8, //?Localization = null,
|
|
/// Description for `ApplicationCommandTypes.ChatInput` commands, 1-100 characters.
|
|
description: ?[]const u8 = null,
|
|
/// Localization object for `description` field. Values follow the same restrictions as `description`
|
|
description_localizations: ?[]const u8, //?Localization = null,
|
|
/// Parameters for the command, max of 25
|
|
options: ?[]ApplicationCommandOption = null,
|
|
/// Set of permissions represented as a bit set
|
|
default_member_permissions: ?[]const u8 = null,
|
|
///
|
|
/// Installation contexts where the command is available
|
|
///
|
|
/// @remarks
|
|
/// This value is available only for globally-scoped commands
|
|
/// Defaults to the application configured contexts
|
|
///
|
|
integration_types: ?[]ApplicationIntegrationType = null,
|
|
///
|
|
/// Interaction context(s) where the command can be used
|
|
///
|
|
/// @remarks
|
|
/// This value is available only for globally-scoped commands
|
|
/// By default, all interaction context types included for new commands.
|
|
///
|
|
contexts: ?[]InteractionContextType = null,
|
|
///
|
|
/// Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.
|
|
///
|
|
/// @deprecated use {@link contexts}; instead
|
|
///
|
|
dm_permission: ?bool = null,
|
|
/// Indicates whether the command is age-restricted, defaults to false
|
|
nsfw: ?bool = null,
|
|
/// Auto incrementing version identifier updated during substantial record changes
|
|
version: ?[]const u8 = null,
|
|
///
|
|
///Determines whether the interaction is handled by the app's interactions handler or by
|
|
///
|
|
/// @remarks
|
|
/// This can only be set for application commands of type `PRIMARY_ENTRY_POINT` for applications with the `EMBEDDED` flag (i.e. applications that have an Activity).
|
|
///
|
|
handler: ?InteractionEntryPointCommandHandlerType = null,
|
|
/// Unique ID of command
|
|
id: Snowflake,
|
|
/// ID of the parent application
|
|
application_id: Snowflake,
|
|
/// Guild id of the command, if not global
|
|
guild_id: ?Snowflake = null,
|
|
};
|
|
|
|
pub const CreateApplicationCommand = struct {
|
|
/// Type of command, defaults to `ApplicationCommandTypes.ChatInput`
|
|
type: ?ApplicationCommandTypes = null,
|
|
///
|
|
/// Name of command, 1-32 characters.
|
|
/// `ApplicationCommandTypes.ChatInput` command names must match the following regex `^[-_\p{L};\p{N};\p{sc=Deva};\p{sc=Thai};]{1,32};$` with the unicode flag set.
|
|
/// If there is a lowercase variant of any letters used, you must use those.
|
|
/// Characters with no lowercase variants and/or uncased letters are still allowed.
|
|
/// ApplicationCommandTypes.User` and `ApplicationCommandTypes.Message` commands may be mixed case and can include spaces.
|
|
///
|
|
name: []const u8,
|
|
/// Localization object for `name` field. Values follow the same restrictions as `name`
|
|
name_localizations: []const u8, //?Localization,
|
|
/// Description for `ApplicationCommandTypes.ChatInput` commands, 1-100 characters.
|
|
description: ?[]const u8 = null,
|
|
/// Localization object for `description` field. Values follow the same restrictions as `description`
|
|
description_localizations: []const u8, //?Localization,
|
|
/// Parameters for the command, max of 25
|
|
options: ?[]ApplicationCommandOption = null,
|
|
/// Set of permissions represented as a bit set
|
|
default_member_permissions: ?[]const u8 = null,
|
|
///
|
|
/// Installation contexts where the command is available
|
|
///
|
|
/// @remarks
|
|
/// This value is available only for globally-scoped commands
|
|
/// Defaults to the application configured contexts
|
|
///
|
|
integration_types: ?[]ApplicationIntegrationType = null,
|
|
///
|
|
/// Interaction context(s) where the command can be used
|
|
///
|
|
/// @remarks
|
|
/// This value is available only for globally-scoped commands
|
|
/// By default, all interaction context types included for new commands.
|
|
///
|
|
contexts: ?[]InteractionContextType = null,
|
|
///
|
|
/// Indicates whether the command is available in DMs with the app, only for globally-scoped commands. By default, commands are visible.
|
|
///
|
|
/// @deprecated use {@link contexts}; instead
|
|
///
|
|
dm_permission: ?bool = null,
|
|
/// Indicates whether the command is age-restricted, defaults to false
|
|
nsfw: ?bool = null,
|
|
/// Auto incrementing version identifier updated during substantial record changes
|
|
version: ?[]const u8 = null,
|
|
///
|
|
///Determines whether the interaction is handled by the app's interactions handler or by
|
|
///
|
|
/// @remarks
|
|
/// This can only be set for application commands of type `PRIMARY_ENTRY_POINT` for applications with the `EMBEDDED` flag (i.e. applications that have an Activity).
|
|
///
|
|
handler: ?InteractionEntryPointCommandHandlerType = null,
|
|
};
|
|
|
|
pub const InteractionEntryPointCommandHandlerType = enum(u4) {
|
|
/// The app handles the interaction using an interaction token
|
|
AppHandler = 1,
|
|
/// handles the interaction by launching an Activity and sending a follow-up message without coordinating with the app
|
|
LaunchActivity = 2,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure
|
|
pub const ApplicationCommandOption = struct {
|
|
/// Type of option
|
|
type: ApplicationCommandOptionTypes,
|
|
///
|
|
/// Name of command, 1-32 characters.
|
|
///
|
|
/// @remarks
|
|
///This value should be unique within an array of {@link ApplicationCommandOption};
|
|
///
|
|
/// {@link ApplicationCommandTypes.ChatInput | ChatInput}; command names must match the following regex `^[-_\p{L};\p{N};\p{sc=Deva};\p{sc=Thai};]{1,32};$` with the unicode flag set.
|
|
/// If there is a lowercase variant of any letters used, you must use those.
|
|
/// Characters with no lowercase variants and/or uncased letters are still allowed.
|
|
///
|
|
/// {@link ApplicationCommandTypes.User | User}; and {@link ApplicationCommandTypes.Message | Message}; commands may be mixed case and can include spaces.
|
|
///
|
|
name: []const u8,
|
|
/// Localization object for the `name` field. Values follow the same restrictions as `name`
|
|
name_localizations: []const u4, //?Localization,
|
|
/// 1-100 character description
|
|
description: []const u8,
|
|
/// Localization object for the `description` field. Values follow the same restrictions as `description`
|
|
description_localizations: ?[]const u8, //?Localization = null,
|
|
///
|
|
/// If the parameter is required or optional. default `false`
|
|
///
|
|
/// @remarks
|
|
/// Valid in all option types except {@link ApplicationCommandOptionTypes.SubCommand | SubCommand}; and {@link ApplicationCommandOptionTypes.SubCommandGroup | SubCommandGroup};
|
|
///
|
|
required: ?bool = null,
|
|
///
|
|
/// Choices for the option from which the user can choose, max 25
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.[]const u8 | []const u8};, {@link ApplicationCommandOptionTypes.Integer | Integer};, or {@link ApplicationCommandOptionTypes.isize | isize};
|
|
///
|
|
/// If you provide an array of choices, they will be the ONLY accepted values for this option
|
|
///
|
|
choices: ?[]ApplicationCommandOptionChoice = null,
|
|
///
|
|
/// If the option is a subcommand or subcommand group type, these nested options will be the parameters
|
|
///
|
|
/// @remarks
|
|
/// Only valid in option of type {@link ApplicationCommandOptionTypes.SubCommand | SubCommand}; or {@link ApplicationCommandOptionTypes.SubCommandGroup | SubCommandGroup};
|
|
///
|
|
options: ?[]ApplicationCommandOption = null,
|
|
///
|
|
/// If autocomplete interactions are enabled for this option.
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.[]const u8 | []const u8};, {@link ApplicationCommandOptionTypes.Integer | Integer};, or {@link ApplicationCommandOptionTypes.isize | isize};
|
|
///
|
|
///When {@link ApplicationCommandOption.choices | choices}; are provided, this may not be set to true
|
|
///
|
|
autocomplete: ?bool = null,
|
|
///
|
|
/// The channels shown will be restricted to these types
|
|
///
|
|
/// @remarks
|
|
/// Only valid in option of type {@link ApplicationCommandOptionTypes.Channel | Channel};
|
|
///
|
|
channel_types: ?[]ChannelTypes = null,
|
|
///
|
|
/// The minimum permitted value
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.Integer | Integer}; or {@link ApplicationCommandOptionTypes.isize | isize};
|
|
///
|
|
min_value: ?isize = null,
|
|
///
|
|
/// The maximum permitted value
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.Integer | Integer}; or {@link ApplicationCommandOptionTypes.isize | isize};
|
|
///
|
|
max_value: ?isize = null,
|
|
///
|
|
/// The minimum permitted length, should be in the range of from 0 to 600
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.[]const u8 | []const u8};
|
|
///
|
|
min_length: ?isize = null,
|
|
///
|
|
/// The maximum permitted length, should be in the range of from 0 to 600
|
|
///
|
|
/// @remarks
|
|
/// Only valid in options of type {@link ApplicationCommandOptionTypes.[]const u8 | []const u8};
|
|
///
|
|
max_length: ?isize = null,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object
|
|
pub const ApplicationCommandOptionChoice = struct {
|
|
/// 1-100 character choice name
|
|
name: []const u8,
|
|
/// Localization object for the `name` field. Values follow the same restrictions as `name`
|
|
name_localizations: []const u8, //?Localization,
|
|
/// Value for the choice, up to 100 characters if []const u8
|
|
value: union(enum) {
|
|
string: []const u8,
|
|
integer: isize,
|
|
},
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/slash-commands#guildapplicationcommandpermissions
|
|
pub const GuildApplicationCommandPermissions = struct {
|
|
/// ID of the command or the application ID. When the `id` field is the application ID instead of a command ID, the permissions apply to all commands that do not contain explicit overwrites.
|
|
id: Snowflake,
|
|
/// ID of the application the command belongs to
|
|
application_id: Snowflake,
|
|
/// ID of the guild
|
|
guild_id: Snowflake,
|
|
/// Permissions for the command in the guild, max of 100
|
|
permissions: []ApplicationCommandPermissions,
|
|
};
|
|
|
|
/// https://discord.com/developers/docs/interactions/slash-commands#applicationcommandpermissions
|
|
pub const ApplicationCommandPermissions = struct {
|
|
/// ID of the role, user, or channel. It can also be a permission constant
|
|
id: Snowflake,
|
|
/// ApplicationCommandPermissionTypes.Role, ApplicationCommandPermissionTypes.User, or ApplicationCommandPermissionTypes.Channel
|
|
type: ApplicationCommandPermissionTypes,
|
|
/// `true` to allow, `false`, to disallow
|
|
permission: bool,
|
|
};
|