#discord-bot #wrapper #macro #bot-framework #proc #proc-macro #discrab

discrab_codegen

Discrab(一个Discord机器人包装器)的过程宏

2个不稳定版本

0.5.0 2022年4月29日
0.1.0 2022年1月13日

#30 in #bot-framework

22 每月下载量
discrab 中使用

MIT 许可证

11KB
201

只是一个Rust Discord包装器。

项目设计理念

  • 高度可扩展且资源高效框架
  • 易于使用,直观,通常为高级别
  • 高度可定制
  • 非常详细文档
  • 适用于商业使用的框架

核心功能

  • 具有结构的宏以创建斜杠命令
  • 命令自动注册

我们想要实现的一些酷想法

  • 单元测试集成
    • 这将涉及能够模拟事件到机器人,以便用户可以测试功能
  • 中间件

计划使用

main.rs

use command::Command;
use command_group::CommandGroup;
use command_with_subcommands::ParentCommand;

fn main() {
    Bot::new("BOT_TOKEN")
        .add_commands([CommandGroup, ParentCommand, Command])
        .run();
}

command.rs

#[command]
struct Command;

impl CommandTrait for Command {
    NAME = "my_command";
    DESCRIPTION = "Does some stuff.";
    // OTHER STUFF

    fn run(ctx: CommandContext) {
        // DO SOME THINGS
    }
}

command_group.rs

#[command_group]
struct CommandGroup;

impl CommandGroupTrait for CommandGroup {
    NAME = "command_group";
    DESCRIPTION = "A group of commands.";
    // OTHER STUFF
}

#[command(CommandGroup)]
struct CommandInGroup;

impl CommandTrait for CommandInGroup {
    NAME = "command_in_group";
    DESCRIPTION = "A command in a command group.";
    // OTHER STUFF
    
    fn run(ctx CommandContext) {
        // DO STUFF
    }
}

command_with_subcommands.rs

#[command]
struct ParentCommand;

impl CommandTrait for ParentCommand {
    NAME = "parent_command";
    DESCRIPTION = "A command with a subcommand.";
    // OTHER STUFF

    fn run(ctx CommandContext) {
        // DO STUFF
    }
}

#[command(ParentCommand)]
struct Subcommand;

impl CommandTrait for Subcommand {
    NAME = "subcommand";
    DESCRIPTION = "A subcommand of a parent command.";
    // OTHER STUFF

    fn run(ctx CommandContext) {
        // DO STUFF
    }
}

依赖

~1.5MB
~35K SLoC