use clap::{Args, Subcommand};
#[derive(Subcommand, Debug)]
pub enum MessageCommand {
Send(MessageSendArgs),
Read(MessageReadArgs),
Broadcast(MessageBroadcastArgs),
Edit(MessageEditArgs),
Delete(MessageDeleteArgs),
Pin(MessageTargetArgs),
Unpin(MessageTargetArgs),
Pins(MessageChannelArgs),
React(MessageReactArgs),
Reactions(MessageTargetArgs),
Poll(MessagePollArgs),
Search(MessageSearchArgs),
#[command(subcommand)]
Thread(ThreadCommand),
#[command(subcommand)]
Voice(VoiceCommand),
#[command(subcommand)]
Sticker(StickerCommand),
#[command(subcommand)]
Emoji(EmojiCommand),
Ban(MemberActionArgs),
Kick(MemberActionArgs),
Timeout(TimeoutArgs),
#[command(subcommand)]
Member(MemberCommand),
#[command(subcommand)]
Role(RoleCommand),
Permissions(MessageChannelArgs),
#[command(subcommand)]
Channel(ChannelActionCommand),
#[command(subcommand)]
Event(EventCommand),
}
#[derive(Args, Debug)]
pub struct MessageSendArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(short = 'm', long)]
pub message: String,
#[arg(long)]
pub media: Option<String>,
#[arg(long)]
pub json: bool,
#[arg(long)]
pub reply_to: Option<String>,
}
#[derive(Args, Debug)]
pub struct MessageReadArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub limit: Option<u32>,
#[arg(long)]
pub json: bool,
}
#[derive(Args, Debug)]
pub struct MessageBroadcastArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub targets: Vec<String>,
#[arg(short = 'm', long)]
pub message: String,
#[arg(long)]
pub json: bool,
}
#[derive(Args, Debug)]
pub struct MessageEditArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub message_id: String,
#[arg(short = 'm', long)]
pub message: String,
}
#[derive(Args, Debug)]
pub struct MessageDeleteArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub message_id: String,
}
#[derive(Args, Debug)]
pub struct MessageTargetArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub message_id: String,
}
#[derive(Args, Debug)]
pub struct MessageChannelArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
}
#[derive(Args, Debug)]
pub struct MessageReactArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub message_id: String,
#[arg(long)]
pub emoji: String,
#[arg(long)]
pub remove: bool,
}
#[derive(Args, Debug)]
pub struct MessagePollArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub poll_question: String,
#[arg(long)]
pub poll_option: Vec<String>,
}
#[derive(Args, Debug)]
pub struct MessageSearchArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub query: String,
#[arg(long)]
pub limit: Option<u32>,
}
#[derive(Args, Debug)]
pub struct MemberActionArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub user_id: String,
#[arg(long)]
pub reason: Option<String>,
}
#[derive(Args, Debug)]
pub struct TimeoutArgs {
#[arg(long)]
pub channel: Option<String>,
#[arg(long)]
pub target: String,
#[arg(long)]
pub user_id: String,
#[arg(long)]
pub duration: String,
#[arg(long)]
pub reason: Option<String>,
}
#[derive(Subcommand, Debug)]
pub enum ThreadCommand {
Create {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
message_id: String,
#[arg(short = 'm', long)]
message: String,
},
Reply {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
thread_id: String,
#[arg(short = 'm', long)]
message: String,
},
}
#[derive(Subcommand, Debug)]
pub enum VoiceCommand {
Join {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
Leave {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
}
#[derive(Subcommand, Debug)]
pub enum StickerCommand {
Send {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
sticker_id: String,
},
List {
#[arg(long)]
channel: Option<String>,
},
}
#[derive(Subcommand, Debug)]
pub enum EmojiCommand {
List {
#[arg(long)]
channel: Option<String>,
},
}
#[derive(Subcommand, Debug)]
pub enum MemberCommand {
List {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
Info {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
user_id: String,
},
}
#[derive(Subcommand, Debug)]
pub enum RoleCommand {
List {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
Assign {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
user_id: String,
#[arg(long)]
role_id: String,
},
Remove {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
user_id: String,
#[arg(long)]
role_id: String,
},
}
#[derive(Subcommand, Debug)]
pub enum ChannelActionCommand {
Create {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
name: String,
},
Delete {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
Info {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
},
}
#[derive(Subcommand, Debug)]
pub enum EventCommand {
Create {
#[arg(long)]
channel: Option<String>,
#[arg(long)]
target: String,
#[arg(long)]
title: String,
#[arg(long)]
description: Option<String>,
#[arg(long)]
start: String,
},
}