use crate::models::payloads::APIRole;
use crate::models::payloads::application_commands::{
ApplicationIntegrationType, InteractionContextType,
};
use crate::models::payloads::channel::{APIAttachment, APIMessage, ChannelType};
use crate::models::payloads::guild::{
APIBaseGuildMember, APIFlaggedGuildMember, APIGuildMember, APIGuildMemberAvatar,
APIGuildMemberJoined, APIPartialInteractionGuild,
};
use crate::models::payloads::monetization::APIEntitlement;
use crate::models::payloads::responses::InteractionType;
use crate::models::payloads::user::APIUser;
use crate::models::rest::Locale;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIMessageInteractionMetadata {
APIApplicationCommandInteractionMetadata(APIApplicationCommandInteractionMetadata),
APIMessageComponentInteractionMetadata(APIMessageComponentInteractionMetadata),
APIModalSubmitInteractionMetadata(APIModalSubmitInteractionMetadata),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIBaseInteractionMetadata {
pub id: String,
pub r#type: InteractionType,
pub user: APIUser,
pub authorizing_integration_owners: APIAuthorizingIntegrationOwnersMap,
pub original_response_message_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIApplicationCommandInteractionMetadata {
#[serde(flatten)]
pub base: APIBaseInteractionMetadata,
pub target_user: Option<APIUser>,
pub target_message_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageComponentInteractionMetadata {
#[serde(flatten)]
pub base: APIBaseInteractionMetadata,
pub interacted_message_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIModalSubmitInteractionMetadata {
#[serde(flatten)]
pub base: APIBaseInteractionMetadata,
pub triggering_interaction_metadata:
Box<APIApplicationCommandInteractionMetadataOrMessageComponentInteractionMetadata>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIApplicationCommandInteractionMetadataOrMessageComponentInteractionMetadata {
APIApplicationCommandInteractionMetadata(APIApplicationCommandInteractionMetadata),
APIMessageComponentInteractionMetadata(APIMessageComponentInteractionMetadata),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PartialAPIMessageInteractionGuildMember {
pub avatar: Option<String>,
pub communication_disabled_until: Option<String>,
pub deaf: Option<bool>,
pub joined_at: Option<String>,
pub mute: Option<bool>,
pub nick: Option<String>,
pub pending: Option<bool>,
pub premium_since: Option<String>,
pub roles: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIMessageInteraction {
pub id: String,
pub r#type: InteractionType,
pub name: String,
pub user: APIUser,
pub member: Option<PartialAPIMessageInteractionGuildMember>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionGuildMember {
#[serde(flatten)]
pub base: APIGuildMember,
pub permissions: String,
pub user: APIUser,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIBaseInteraction<TType, Data> {
pub id: String,
pub application_id: String,
pub r#type: TType,
pub data: Option<Data>,
pub guild: Option<APIPartialInteractionGuild>,
pub guild_id: Option<String>,
pub channel: Option<APIInteractionChannelRef>,
pub channel_id: Option<String>,
pub member: Option<APIInteractionGuildMember>,
pub user: Option<APIUser>,
pub token: String,
pub version: u8,
pub message: Option<APIMessage>,
pub app_permissions: String,
pub locale: Locale,
pub guild_locale: Option<Locale>,
pub entitlements: Vec<APIEntitlement>,
pub authorizing_integration_owners: APIAuthorizingIntegrationOwnersMap,
pub context: Option<InteractionContextType>,
pub attachment_size_limit: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionChannelRef {
pub id: String,
#[serde(rename = "type")]
pub r#type: ChannelType,
}
pub type APIAuthorizingIntegrationOwnersMap = HashMap<ApplicationIntegrationType, String>;
pub type APIDMInteractionWrapper<Original> = Original;
pub type APIGuildInteractionWrapper<Original> = Original;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionDataResolvedChannelBase {
pub id: String,
#[serde(rename = "type")]
pub r#type: ChannelType,
pub permissions: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum APIInteractionDataResolvedChannel {
NonThread(APIInteractionDataResolvedChannelBase),
Thread {
#[serde(flatten)]
base: APIInteractionDataResolvedChannelBase,
#[serde(default)]
parent_id: Option<String>,
#[serde(default)]
thread_metadata: Option<serde_json::Value>,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionDataResolvedGuildMember {
#[serde(flatten)]
pub base: APIBaseGuildMember,
#[serde(flatten)]
pub flagged: APIFlaggedGuildMember,
#[serde(flatten)]
pub avatar: APIGuildMemberAvatar,
#[serde(flatten)]
pub joined: APIGuildMemberJoined,
pub permissions: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIInteractionDataResolved {
pub users: Option<HashMap<String, APIUser>>,
pub roles: Option<HashMap<String, APIRole>>,
pub members: Option<HashMap<String, APIInteractionDataResolvedGuildMember>>,
pub channels: Option<HashMap<String, APIInteractionDataResolvedChannel>>,
pub attachments: Option<HashMap<String, APIAttachment>>,
}
pub type APIChatInputApplicationCommandInteractionDataResolved = APIInteractionDataResolved;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIUserInteractionDataResolved {
pub members: Option<HashMap<String, APIInteractionDataResolvedGuildMember>>,
pub users: HashMap<String, APIUser>,
}
pub type APIUserApplicationCommandInteractionDataResolved = APIUserInteractionDataResolved;