3 个版本

0.1.2 2023年2月1日
0.1.1 2021年6月14日
0.1.0 2021年5月31日

#1749 in 网页编程

31 每月下载量

MIT 许可证

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