#aws-lambda #discord-bot #discord #aws #serverless #slash-command #back-end

discord_interaction

一个用于使用 Discord 交互模型的库。使用 AWS Lambda。

4 个版本

0.0.5 2023年11月2日
0.0.4 2023年10月26日
0.0.3 2023年10月22日
0.0.2 2023年10月20日
0.0.1 2023年10月10日

#1915 in Web 编程

每月下载量 47

GPL-3.0-only

22KB
440

Discord Interaction

一个轻量级、易于使用的库,用于在 Discord 交互模态下构建 Discord 机器人。与 AWS Lambda 集成。

大多数 Discord 机器人的行为可以使用请求/响应模型来描述,其中将斜杠命令、按钮点击或其他用户交互发送到后端,后端返回单个响应。Discord 将这种请求/响应称为 交互,并在 Discord 开发者文档中详细说明了。此库封装了这些请求和响应类型,处理身份验证,公开应用程序友好的类型,并将这些类型与 AWS Lambda 集成。要创建 Lambda 端点程序,您需要一个机器人公钥,一个 InteractionHandler 特性的实现,并使用该实现调用 run 函数。以下是一个示例,取自 demos/hello_world

use discord_interaction::{run, ApplicationCommand, InteractionHandler, Message, Response};
use lambda_http::Error;

const APPLICATION_PUBLIC_KEY: &str = env!("DEMO_PUBLIC_KEY");

#[tokio::main]
async fn main() -> Result<(), Error> {
    run::<DemoHandler>(APPLICATION_PUBLIC_KEY).await
}

struct DemoHandler;

impl InteractionHandler for DemoHandler {
    fn handle_application_command(ac: ApplicationCommand) -> Response {
        let text_content = format!("Hello <@{}>!", ac.user_id);
        Response::Message(
            Message::new().text(&text_content))
    }
}

然后,可以使用 cargo lambda buildcargo lambda deploy 命令将该程序部署到 AWS Lambda。Lambda 创建后,您可以创建一个 Discord 应用程序 并将您的应用程序交互端点 URL 注册到连接到 Lambda 的网关。此外,您还应注册您的机器人将使用的 应用程序命令。有关交互端点程序示例以及它们的部署和应用程序命令设置的脚本,请参阅 demos/ 文件夹中的源代码和部署脚本。

值得注意的是,lambda(也称为无服务器)部署确实限制了机器人的功能。由于我们每个交互仅限于请求/响应对,我们的应用无法执行需要更长时间存活的事情,例如流音乐。但权衡之下,lambda易于部署,成本极低,在处理并发方面表现良好。

依赖项

~13–25MB
~442K SLoC