use serde::{Deserialize, Serialize};
use crate::{application::Application, embeds::Embed, models::user::User};
#[derive(Serialize, Deserialize, Debug)]
pub struct RoleTags {
pub bot_id: Option<String>,
pub integration_id: Option<String>,
pub premium_subscriber: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Role {
pub id: String,
pub name: String,
pub color: i32,
pub hoist: bool,
pub icon: Option<String>,
pub unicode_emoji: Option<String>,
pub position: i32,
pub permissions: i32,
pub managed: bool,
pub mentionable: bool,
pub tags: Option<RoleTags>,
#[serde(default)]
pub flags: i32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Attachments {
pub id: String,
pub filename: String,
pub title: Option<String>,
pub description: Option<String>,
pub content_type: String,
pub size: i32,
pub url: String,
pub proxy_url: String,
pub height: Option<i32>,
pub width: Option<i32>,
pub ephemeral: Option<bool>,
pub duration: Option<i32>,
pub waveform: Option<Vec<i32>>,
pub spoiler: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Reaction {
pub count: i32,
pub count_details: Vec<ReactionCountDetails>,
pub me: bool,
pub me_react: bool,
pub emoji: Emoji,
pub burst_color: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReactionCountDetails {
pub burst: i32,
pub normal: i32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Emoji {
pub id: Option<String>,
pub name: Option<String>,
pub roles: Option<Vec<Role>>,
pub user: Option<User>,
pub require_colons: Option<bool>,
pub managed: Option<bool>,
pub animated: Option<bool>,
pub available: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct MessageActivity {
pub r#type: i32,
pub party_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ChannelMessage {
pub id: String,
pub channel_id: String,
pub author: User,
pub content: String,
pub timestamp: String,
pub edited_timestamp: Option<String>,
pub tts: bool,
pub mention_everyone: bool,
pub mentions: Vec<User>,
pub mention_roles: Vec<Role>,
pub attachments: Vec<Attachments>,
pub embeds: Vec<Embed>,
pub reactions: Option<Vec<Reaction>>,
pub nonce: Option<String>,
pub pinned: bool,
pub webhook_id: Option<String>,
pub r#type: i32,
pub activity: Option<MessageActivity>,
pub application: Option<Application>,
#[serde(default)]
pub application_id: String,
#[serde(default)]
pub flags: usize,
}
impl ChannelMessage {
pub fn new(
id: String,
channel_id: String,
author: User,
content: String,
timestamp: String,
tts: bool,
mention_everyone: bool,
mentions: Vec<User>,
mention_roles: Vec<Role>,
attachments: Vec<Attachments>,
embeds: Vec<Embed>,
reactions: Option<Vec<Reaction>>,
nonce: Option<String>,
pinned: bool,
webhook_id: Option<String>,
r#type: i32,
activity: Option<MessageActivity>,
application: Option<Application>,
application_id: String,
flags: usize,
) -> Self {
Self {
id,
channel_id,
author,
content,
timestamp,
edited_timestamp: None,
tts,
mention_everyone,
mentions,
mention_roles,
attachments,
embeds,
reactions,
nonce,
pinned,
webhook_id,
r#type,
activity,
application,
application_id,
flags,
}
}
pub async fn send(&self, message: String) -> () {
println!("Message sent: {}", message);
}
}