Document some flags

This commit is contained in:
kozabrada123 2023-07-29 11:26:10 +02:00
parent ede965411e
commit b632958b0f
2 changed files with 85 additions and 0 deletions

View File

@ -8,6 +8,8 @@ use crate::types::{Team, User};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[cfg_attr(feature = "sqlx", derive(sqlx::FromRow))]
/// # Reference
/// See <https://discord.com/developers/docs/resources/application#application-resource>
pub struct Application {
pub id: Snowflake,
pub name: String,
@ -93,6 +95,8 @@ impl Application {
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
/// # Reference
/// See <https://discord.com/developers/docs/resources/application#install-params-object>
pub struct InstallParams {
pub scopes: Vec<String>,
pub permissions: String,
@ -100,21 +104,37 @@ pub struct InstallParams {
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
/// # Reference
/// See <https://discord.com/developers/docs/resources/application#application-object-application-flags>
pub struct ApplicationFlags: u64 {
/// Indicates if an app uses the Auto Moderation API
const APPLICATION_AUTO_MODERATION_RULE_CREATE_BADGE = 1 << 6;
/// Intent required for bots in 100 or more servers to receive presence_update events
const GATEWAY_PRESENCE = 1 << 12;
/// Intent required for bots in under 100 servers to receive presence_update events, found on the Bot page in your app's settings on discord.com
const GATEWAY_PRESENCE_LIMITED = 1 << 13;
/// Intent required for bots in 100 or more servers to receive member-related events like guild_member_add.
/// See the list of member-related events under GUILD_MEMBERS
const GATEWAY_GUILD_MEMBERS = 1 << 14;
/// Intent required for bots in under 100 servers to receive member-related events like guild_member_add, found on the Bot page in your app's settings on discord.com.
/// See the list of member-related events under GUILD_MEMBERS
const GATEWAY_GUILD_MEMBERS_LIMITED = 1 << 15;
/// Indicates unusual growth of an app that prevents verification
const VERIFICATION_PENDING_GUILD_LIMIT = 1 << 16;
/// Indicates if an app is embedded within the Discord client (currently unavailable publicly)
const EMBEDDED = 1 << 17;
/// Intent required for bots in 100 or more servers to receive message content
const GATEWAY_MESSAGE_CONTENT = 1 << 18;
/// Intent required for bots in under 100 servers to receive message content, found on the Bot page in your app's settings on discord.com
const GATEWAY_MESSAGE_CONTENT_LIMITED = 1 << 19;
/// Indicates if an app has registered slash commands
const APPLICATION_COMMAND_BADGE = 1 << 23;
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
/// # Reference
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object>
pub struct ApplicationCommand {
pub id: Snowflake,
pub application_id: Snowflake,
@ -124,6 +144,8 @@ pub struct ApplicationCommand {
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
/// Reference
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-option-structure>
pub struct ApplicationCommandOption {
pub r#type: ApplicationCommandOptionType,
pub name: String,
@ -142,15 +164,24 @@ pub struct ApplicationCommandOptionChoice {
#[derive(Debug, Clone, Copy, PartialEq, Serialize_repr, Deserialize_repr)]
#[cfg_attr(feature = "sqlx", derive(sqlx::Type))]
#[repr(i32)]
/// # Reference
/// See <https://discord.com/developers/docs/interactions/application-commands#application-command-object-application-command-types>
pub enum ApplicationCommandOptionType {
SubCommand = 1,
SubCommandGroup = 2,
String = 3,
/// Any integer between -2^53 and 2^53
Integer = 4,
Boolean = 5,
User = 6,
/// Includes all channel types + categories
Channel = 7,
Role = 8,
/// Includes users and roles
Mentionable = 9,
/// Any double between -2^53 and 2^53
Number = 10,
Attachment = 11,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]

View File

@ -54,56 +54,109 @@ pub struct RoleTags {
bitflags! {
#[derive(Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
/// Permissions limit what users of certain roles can do on a Guild to Guild basis.
///
/// # Reference:
/// See <https://discord.com/developers/docs/topics/permissions#permissions>
pub struct PermissionFlags: u64 {
/// Allows creation of instant invites
const CREATE_INSTANT_INVITE = 1 << 0;
/// Allows kicking members
const KICK_MEMBERS = 1 << 1;
/// Allows banning members
const BAN_MEMBERS = 1 << 2;
/// Allows all permissions and bypasses channel permission overwrites
const ADMINISTRATOR = 1 << 3;
/// Allows management and editing of channels
const MANAGE_CHANNELS = 1 << 4;
/// Allows management and editing of the guild and guild settings
const MANAGE_GUILD = 1 << 5;
/// Allows for the addition of reactions to messages
const ADD_REACTIONS = 1 << 6;
/// Allows viewing of the audit log
const VIEW_AUDIT_LOG = 1 << 7;
/// Allows using priority speaker in a voice channel
const PRIORITY_SPEAKER = 1 << 8;
/// Allows the user to go live and share their screen
const STREAM = 1 << 9;
/// Allows guild members to view a channel, which includes reading messages in text channels and joining voice channels
const VIEW_CHANNEL = 1 << 10;
/// Allows sending messages in a channel and creating threads in a forum (does not allow sending messages in threads)
const SEND_MESSAGES = 1 << 11;
/// Allows sending /tts messages
const SEND_TTS_MESSAGES = 1 << 12;
/// Allows deletion of other users' messages
const MANAGE_MESSAGES = 1 << 13;
/// Links sent by users with this permission will be auto-embedded
const EMBED_LINKS = 1 << 14;
/// Allows uploading images and files
const ATTACH_FILES = 1 << 15;
/// Allows reading of message history
const READ_MESSAGE_HISTORY = 1 << 16;
/// Allows using the @everyone tag to notify all users in a channel, and the @here tag to notify all online users in a channel
const MENTION_EVERYONE = 1 << 17;
/// Allows the usage of custom emojis from other servers
const USE_EXTERNAL_EMOJIS = 1 << 18;
/// Allows viewing guild insights
const VIEW_GUILD_INSIGHTS = 1 << 19;
/// Allows joining of a voice channel
const CONNECT = 1 << 20;
/// Allows speaking in a voice channel
const SPEAK = 1 << 21;
/// Allows muting members in a voice channel
const MUTE_MEMBERS = 1 << 22;
/// Allows deafening of members in a voice channel
const DEAFEN_MEMBERS = 1 << 23;
/// Allows moving of members between voice channels
const MOVE_MEMBERS = 1 << 24;
/// Allows using voice activity (VAD = voice-activity-detection) in a voice channel
const USE_VAD = 1 << 25;
/// Allows modification of own nickname
const CHANGE_NICKNAME = 1 << 26;
/// Allows modification of other users' nicknames
const MANAGE_NICKNAMES = 1 << 27;
/// Allows management and editing of roles
const MANAGE_ROLES = 1 << 28;
/// Allows management and editing of webhooks
const MANAGE_WEBHOOKS = 1 << 29;
/// Allows management and editing of emojis, stickers, and soundboard sounds
const MANAGE_GUILD_EXPRESSIONS = 1 << 30;
/// Allows members to use application commands, including slash commands and context menu commands.
const USE_APPLICATION_COMMANDS = 1 << 31;
/// Allows requesting to speak in stage channels. (*This permission is under active development and may be changed or removed.*)
const REQUEST_TO_SPEAK = 1 << 32;
/// Allows creating, editing, and deleting scheduled events
const MANAGE_EVENTS = 1 << 33;
/// Allows deleting and archiving threads, and viewing all private threads
const MANAGE_THREADS = 1 << 34;
/// Allows creating public and announcement threads
const CREATE_PUBLIC_THREADS = 1 << 35;
/// Allows creating private threads
const CREATE_PRIVATE_THREADS = 1 << 36;
/// Allows the usage of custom stickers from other servers
const USE_EXTERNAL_STICKERS = 1 << 37;
/// Allows sending messages in threads
const SEND_MESSAGES_IN_THREADS = 1 << 38;
/// Allows using Activities in a voice channel
const USE_EMBEDDED_ACTIVITIES = 1 << 39;
/// Allows timing out users to prevent them from sending or reacting to messages in chat and threads, and from speaking in voice and stage channels
const MODERATE_MEMBERS = 1 << 40;
/// Allows viewing role subscription insights
const VIEW_CREATOR_MONETIZATION_ANALYTICS = 1 << 41;
/// Allows using the soundboard in a voice channel
const USE_SOUNDBOARD = 1 << 42;
/// Allows using custom soundboard sounds from other servers
const USE_EXTERNAL_SOUNDS = 1 << 45;
/// Allows sending voice messages
const SEND_VOICE_MESSAGES = 1 << 46;
}
}
impl PermissionFlags {
/// Returns if the PermissionFlags object has specific permissions
///
/// # Notes
/// Note that if the object has the [PermissionFlags::ADMINISTRATOR] permission, this always returns true
pub fn has_permission(&self, permission: PermissionFlags) -> bool {
self.contains(permission) || self.contains(PermissionFlags::ADMINISTRATOR)
}
@ -114,6 +167,7 @@ impl PermissionFlags {
}
/// Creates a String of Permissions from a given [`Vec`] of [`PermissionFlags`].
///
/// # Example:
/// ```
/// use chorus::types::{PermissionFlags};