#bot #guilded #events #task #task-pool #handler #event-handling

guilded_rs

用于在 guilded 中创建 Rust 机器人的库

1 个不稳定版本

0.1.0 2023年9月24日
0.0.1 2023年5月20日

#1 in #guilded

CC-BY-NC-ND-4.0

57KB
1.5K SLoC

guilded_rs

crates.io Documentation

使用 Rust 创建 guilded 机器人的易于使用的库。

功能

示例文件夹

此文件夹用于展示如何使用库的实时示例工作。但也可以
用于测试库,因为我写得不好的单元测试,我有点讨厌它们。

任务池

使用任务池,您可以在后台创建运行的任务。

示例

这将每秒运行一次

bot.add_task(Task {
    interval: Duration::from_secs(1),
    handler: |_| {
        println!("Hi from task that runs every second");
    },
});

此任务将每10秒运行一次,并在一个频道中发送消息。

bot.add_task(Task {
    interval: Duration::from_secs(10),
    handler: |bot| {
        let mut message = ChatMessage::default();
        message.set_content("Content of the message");
        let channel_id = "2b203b41-5409-436e-9ade-a3c1b640b594";
        let is_reply = false;
        match bot.send_chat_message(message, channel_id) {
            Some(msg) => {
                // msg is the message that just got created
            }
            None => {
                // Returns None if the request failed.
                // in this case look at the console for the error message.
                // And if you need help with that don't be
                // shy and send me a message on guilded.
            }
        }
    },
});

事件处理器

目前,库解析的唯一事件是来自 WS 服务器的 ChatMessageCreated 事件

// The bot variable is the http client of the bot.
// While the event is the enum of the event
bot.add_event_handler(|_bot, event| match event {
    Event::ChatMessageCreated(data) => {
        println!("{:?}", data);
    }
    _ => {}
});

命令

如何声明命令的示例。

struct PingCommand;
impl Command for PingCommand {
    fn name(&self) -> String {
        "ping".to_string()
    }

    fn description(&self) -> String {
        "returns pong".to_string()
    }

    fn handler(&self, ctx: CommandContext, _args: Vec<String>) {
        let mut message = Message::default();
        message.set_content("pong");
        ctx.reply(message);
    }
}

以下是将其添加到机器人的方法

let ping_command: PingCommand = PingCommand {};
bot.add_command(Box::new(ping_command));

依赖项

~8–20MB
~328K SLoC