discord-selfbot 0.1.0

Discord selfbot API library for Rust
Documentation
use serde::{Deserialize, Serialize};
use crate::utils::Snowflake;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum Channel {
    #[serde(rename = "0")]
    GuildText(TextChannel),
    #[serde(rename = "1")]
    DM(DMChannel),
    #[serde(rename = "2")]
    GuildVoice(VoiceChannel),
    #[serde(rename = "3")]
    GroupDM(GroupDMChannel),
    #[serde(rename = "4")]
    GuildCategory(CategoryChannel),
    #[serde(rename = "5")]
    GuildNews(NewsChannel),
    #[serde(rename = "10", rename_all = "snake_case")]
    GuildNewsThread(ThreadChannel),
    #[serde(rename = "11", rename_all = "snake_case")]
    GuildPublicThread(ThreadChannel),
    #[serde(rename = "12", rename_all = "snake_case")]
    GuildPrivateThread(ThreadChannel),
    #[serde(rename = "13")]
    GuildStageVoice(StageChannel),
    #[serde(rename = "15")]
    GuildForum(ForumChannel),
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TextChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
    pub topic: Option<String>,
    pub nsfw: Option<bool>,
    pub last_message_id: Option<Snowflake>,
    pub rate_limit_per_user: Option<u32>,
    pub parent_id: Option<Snowflake>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DMChannel {
    pub id: Snowflake,
    pub last_message_id: Option<Snowflake>,
    pub recipients: Vec<serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VoiceChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
    pub bitrate: Option<u32>,
    pub user_limit: Option<u32>,
    pub parent_id: Option<Snowflake>,
    pub rtc_region: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GroupDMChannel {
    pub id: Snowflake,
    pub name: Option<String>,
    pub recipients: Vec<serde_json::Value>,
    pub icon: Option<String>,
    pub owner_id: Snowflake,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NewsChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
    pub topic: Option<String>,
    pub nsfw: Option<bool>,
    pub last_message_id: Option<Snowflake>,
    pub parent_id: Option<Snowflake>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ThreadChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub parent_id: Option<Snowflake>,
    pub owner_id: Option<Snowflake>,
    pub name: String,
    pub last_message_id: Option<Snowflake>,
    pub thread_metadata: Option<serde_json::Value>,
    pub message_count: Option<u32>,
    pub member_count: Option<u32>,
    pub rate_limit_per_user: Option<u32>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StageChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
    pub bitrate: Option<u32>,
    pub user_limit: Option<u32>,
    pub parent_id: Option<Snowflake>,
    pub rtc_region: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ForumChannel {
    pub id: Snowflake,
    pub guild_id: Option<Snowflake>,
    pub name: String,
    pub position: Option<u32>,
    pub permission_overwrites: Option<Vec<serde_json::Value>>,
    pub topic: Option<String>,
    pub nsfw: Option<bool>,
    pub parent_id: Option<Snowflake>,
    pub rate_limit_per_user: Option<u32>,
    pub available_tags: Option<Vec<serde_json::Value>>,
    pub default_reaction_emoji: Option<serde_json::Value>,
    pub default_thread_rate_limit_per_user: Option<u32>,
    pub default_sort_order: Option<u8>,
    pub default_forum_layout: Option<u8>,
}

impl Channel {
    pub fn id(&self) -> Snowflake {
        match self {
            Channel::GuildText(c) => c.id,
            Channel::DM(c) => c.id,
            Channel::GuildVoice(c) => c.id,
            Channel::GroupDM(c) => c.id,
            Channel::GuildCategory(c) => c.id,
            Channel::GuildNews(c) => c.id,
            Channel::GuildNewsThread(c) => c.id,
            Channel::GuildPublicThread(c) => c.id,
            Channel::GuildPrivateThread(c) => c.id,
            Channel::GuildStageVoice(c) => c.id,
            Channel::GuildForum(c) => c.id,
        }
    }
}