twitch_tohell 0.1.1

Twitch EventSub webhook and WebSocket support
Documentation
use serde::{Deserialize, Serialize};

use crate::{
    BroadcasterId, ModeratorId, UserId,
    events::channels::moderate::{
        AutomodTermsModeration, BanModeration, DeleteModeration, FollowersModeration,
        ModModeration, RaidModeration, SlowModeration, TimeoutModeration, UnbanModeration,
        UnbanRequestModeration, UnmodModeration, UnraidModeration, UntimeoutModeration,
        UnvipModeration, VipModeration,
    },
};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChannelModerate {
    pub broadcaster_user_id: BroadcasterId,
    pub broadcaster_user_login: String,
    pub broadcaster_user_name: String,
    pub source_broadcaster_user_id: BroadcasterId,
    pub source_broadcaster_user_login: String,
    pub soruce_broadcaster_user_name: String,
    pub moderator_user_id: ModeratorId,
    pub moderator_user_login: String,
    pub moderator_user_name: String,
    pub action: Action,
    pub followers: Option<FollowersModeration>,
    pub slow: Option<SlowModeration>,
    pub vip: Option<VipModeration>,
    pub unvip: Option<UnvipModeration>,
    #[serde(rename = "mod")]
    pub mod_: Option<ModModeration>,
    pub unmod: Option<UnmodModeration>,
    pub ban: Option<BanModeration>,
    pub unban: Option<UnbanModeration>,
    pub timeout: Option<TimeoutModeration>,
    pub untimeout: Option<UntimeoutModeration>,
    pub raid: Option<RaidModeration>,
    pub unraid: Option<UnraidModeration>,
    pub delete: Option<DeleteModeration>,
    pub automod_terms: Option<AutomodTermsModeration>,
    pub unban_request: Option<UnbanRequestModeration>,
    pub warn: Option<WarnModeration>,

    pub shared_chat_ban: Option<String>,
    pub shared_chat_unban: Option<String>,
    pub shared_chat_timeout: Option<String>,
    pub shared_chat_untimeout: Option<String>,
    pub shared_chat_delete: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WarnModeration {
    pub user_id: UserId,
    pub user_login: String,
    pub user_name: String,
    pub reason: Option<String>,
    pub chat_rules_cited: Option<Vec<String>>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum Action {
    Ban,
    Timeout,
    Unban,
    Untimeout,
    Clear,
    Emoteonly,
    EmoteonlyOff,
    Followers,
    FollowersOff,
    UniqueChat,
    UniquechatOff,
    Slow,
    SlowOff,
    Subscribers,
    SubscribersOff,
    Unraid,
    Delete,
    Unvip,
    Vip,
    Raid,
    #[serde(rename = "add_blocked_term")]
    AddBlockedTerm,
    #[serde(rename = "add_permitted_term")]
    AddPermittedTerm,
    #[serde(rename = "remove_blocked_term")]
    RemoveBlockedTerm,
    #[serde(rename = "remove_permitted_term")]
    RemovePermittedTerm,
    Mod,
    Unmod,
    #[serde(rename = "approve_unban_request")]
    ApproveUnbanRequest,
    #[serde(rename = "deny_unban_request")]
    DenyUnbanRequest,
    Warn,
    #[serde(rename = "shared_chat_ban")]
    SharedChatBan,
    #[serde(rename = "shared_chat_timeout")]
    SharedChatTimeout,
    #[serde(rename = "shared_chat_untimeout")]
    SharedChatUntimeout,
    #[serde(rename = "shared_chat_unban")]
    SharedChatUnban,
    #[serde(rename = "shared_chat_delete")]
    SharedChatDelete,
}