3 个版本
0.1.2 | 2023年2月1日 |
---|---|
0.1.1 | 2021年6月14日 |
0.1.0 | 2021年5月31日 |
#1749 in 网页编程
31 每月下载量
61KB
1.5K SLoC
Slashy
这是一个 Serenity 的命令框架草案,允许为常规文本命令和 Discord 的新 slash 命令 注册命令。
不同于 Serenity 的属性风格命令注册,我们通过可能的参数树来注册命令,不同的子命令在不同的分支上执行。
基本命令
use slashy::{
command,
commands::CommandResult,
framework::{CommandContext, Framework},
serenity::{prelude::GatewayIntents, Client},
settings::Settings,
subcommand,
};
command! {
ping,
"ping pong",
pong,
[
optional String text | "text to echo"
]
}
#[subcommand]
async fn pong(ctx: &CommandContext) -> CommandResult {
ctx.send_str(&format!("pong {:?}", ctx.get_arg("text")))
.await?;
Ok(())
}
#[tokio::main]
async fn main() {
let token = std::env::var("DISCORD_TOKEN").expect("token");
let app_id = std::env::var("APPLICATION_ID")
.expect("app_id")
.parse()
.expect("app_id parse");
// Create the slashy framework
let settings = Settings {
prefixes: vec!["!"],
auto_register: true,
auto_delete: true,
slash_command_guilds: vec![],
};
let framework = Framework::new(settings, app_id, token.clone())
.await
.command::<PING_COMMAND>();
// Login with a bot token from the environment
let mut client = Client::builder(
token,
GatewayIntents::GUILD_MESSAGES | GatewayIntents::MESSAGE_CONTENT,
)
.event_handler(framework)
.await
.expect("Error creating client");
// start listening for events by starting a single shard
if let Err(why) = client.start().await {
println!("An error occurred while running the client: {why:?}");
}
}
依赖项
~12–30MB
~442K SLoC