Skip to content

A command framework for Serenity with support for slash commands and text commands

License

Notifications You must be signed in to change notification settings

maddymakesgames/slashy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slashy

This is a wip command frame work for Serenity that allows commands to be registered for both normal text commands and Discord's new slash commands

Instead of taking Serenity's attribute style of command registering, we register commands via a tree of possible arguments with different subcommands being executed at different branches.

Basic Command

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:?}");
    }
}

About

A command framework for Serenity with support for slash commands and text commands

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages