7个不稳定版本 (3个破坏性版本)
0.4.3 | 2023年12月9日 |
---|---|
0.4.2 | 2023年12月9日 |
0.3.0 | 2023年12月5日 |
0.2.1 | 2023年12月4日 |
0.1.0 | 2023年12月4日 |
#5 in #serenity
每月下载量76
26KB
258 代码行
Serenity Commands
用于创建/解析Serenity斜杠命令的库。
用法
查看examples
目录中的更多示例。
use serenity::all::{
async_trait, Client, Context, CreateInteractionResponse, CreateInteractionResponseMessage,
EventHandler, GatewayIntents, GuildId, Interaction,
};
use serenity_commands::{Command, Commands, SubCommand};
#[derive(Debug, Commands)]
enum AllCommands {
/// Ping the bot.
Ping,
/// Echo a message.
Echo {
/// The message to echo.
message: String,
},
/// Perform math operations.
Math(MathCommand),
}
impl AllCommands {
fn run(self) -> String {
match self {
Self::Ping => "Pong!".to_string(),
Self::Echo { message } => message,
Self::Math(math) => math.run().to_string(),
}
}
}
#[derive(Debug, Command)]
enum MathCommand {
/// Add two numbers.
Add(BinaryOperation),
/// Subtract two numbers.
Subtract(BinaryOperation),
/// Multiply two numbers.
Multiply(BinaryOperation),
/// Divide two numbers.
Divide(BinaryOperation),
/// Negate a number.
Negate {
/// The number to negate.
a: f64,
},
}
impl MathCommand {
fn run(self) -> f64 {
match self {
Self::Add(BinaryOperation { a, b }) => a + b,
Self::Subtract(BinaryOperation { a, b }) => a - b,
Self::Multiply(BinaryOperation { a, b }) => a * b,
Self::Divide(BinaryOperation { a, b }) => a / b,
Self::Negate { a } => -a,
}
}
}
#[derive(Debug, SubCommand)]
struct BinaryOperation {
/// The first number.
a: f64,
/// The second number.
b: f64,
}
struct Handler {
guild_id: GuildId,
}
#[async_trait]
impl EventHandler for Handler {
async fn ready(&self, ctx: Context, _: serenity::all::Ready) {
self.guild_id
.set_commands(&ctx, AllCommands::create_commands())
.await
.unwrap();
}
async fn interaction_create(&self, ctx: Context, interaction: Interaction) {
if let Interaction::Command(command) = interaction {
let command_data = AllCommands::from_command_data(&command.data).unwrap();
command
.create_response(
ctx,
CreateInteractionResponse::Message(
CreateInteractionResponseMessage::new().content(command_data.run()),
),
)
.await
.unwrap();
}
}
}
依赖关系
~11MB
~217K SLoC