#discord-bot #serenity #discord #utilities #rust

serenity_utils

为使用 serenity 创建的 Discord 机器人提供额外实用工具的库。

9 个版本 (有破坏性更新)

0.7.0 2022 年 7 月 26 日
0.6.1 2021 年 2 月 1 日
0.6.0 2021 年 1 月 10 日
0.5.1 2020 年 11 月 28 日

#1599 in 网页编程

每月 29 次下载

ISC 许可证

85KB
1K SLoC

serenity-utils

docs badge crates.io badge license badge rust 1.53.0+ badge

一个库,为使用 serenity 创建的 Discord 机器人提供转换、提示和菜单功能。

此库提供了易于实现以下功能的实现:

  • 使用消息或反应提示获取用户响应。
  • 显示基于反应的分页消息/菜单。
  • 在发送之前以不同的方式格式化文本。
  • 将字符串转换为 serenity 的特定于 guild 的模型。(已弃用;请改用 serenity 的 ArgumentConvert trait)
  • 使用字段访问创建嵌入和消息。(已弃用;请直接使用 serenity 的构建器)

安装和使用

要使用此包,请将以下内容添加到您的 Cargo.toml

[dependencies]
serenity_utils = "0.7.0"

注意:此包仅支持 serenity 的异步版本和至少 Rust 1.53(与最新版 serenity 保持一致)。

示例

以下是一些使用 serenity_utils 特性的示例。

反应提示

use serenity::{
   model::prelude::{ChannelId, Message, ReactionType},
   prelude::Context,
};
use serenity_utils::{prompt::reaction_prompt, Error};

async fn prompt(ctx: &Context, msg: &Message) -> Result<(), Error> {
    // Emojis for the prompt.
    let emojis = [
        ReactionType::from('🐶'),
        ReactionType::from('🐱'),
    ];

    let prompt_msg = ChannelId(7).say(&ctx.http, "Dogs or cats?").await?;

    // Creates the prompt and returns the result. Because of `reaction_prompt`'s
    // return type, you can use the `?` operator to get the result.
    // The `Ok()` value is the selected emoji's index (wrt the `emojis` slice)
    // and the emoji itself. We don't require the emoji here, so we ignore it.
    let (idx, _) = reaction_prompt(
        ctx,
        &prompt_msg,
        &msg.author,
        &emojis,
        30.0
    )
    .await?;

    if idx == 0 {
        // Dogs!
    } else {
        // Cats!
    }

    Ok(())
}

菜单

use serenity::{
    builder::CreateMessage,
    model::prelude::Message,
    prelude::Context,
};
use serenity_utils::{
    menu::{Menu, MenuOptions},
    Error,
};

async fn use_menu(ctx: &Context, msg: &Message) -> Result<(), Error> {
    let mut page_one = CreateMessage::default();
    page_one
        .content("Page number one!")
        .embed(|e| {
            e.description("The first page!");

            e
        });

    let mut page_two = CreateMessage::default();
    page_two
        .content("Page number two!")
        .embed(|e| {
            e.description("The second page!");

            e
        });

    let pages = [page_one, page_two];

    // Creates a new menu.
    let menu = Menu::new(ctx, msg, &pages, MenuOptions::default());

    // Runs the menu and returns optional `Message` used to display the menu.
    let opt_message = menu.run().await?;

    Ok(())
}

更多示例

更多详细说明此包功能的示例可以在 examples 目录中找到。

功能

此包的一些功能依赖于 serenity 的功能。

使用 serenity_utils 时,需要以下 serenity 功能:

  • client
  • collector
  • gateway
  • model

以下 serenity_utils 功能是可选的

  • cache: 启用 serenitycache 功能。在使用 Conversion trait 时,从用户名、标签或昵称获取 Member 时需要。
  • rustls_backend: 在所有平台上使用 Rustls,一个纯 Rust 实现。
  • native_tls_backend:在Windows上使用SChannel,在macOS上使用Secure Transport,在其他平台上使用OpenSSL

cacherustls_backend 默认启用。

  • default_native_tls:启用与 serenity_utils 的默认功能,并使用 native_tls_backend

它们启用与 serenity 同名的功能。

注意:必须使用 rustls_backendnative_tls_backend 之一。

您可以通过将以下内容添加到您的 Cargo.toml 来指定功能

[dependencies.serenity_utils]
version = "0.7.0"

# To disable default features.
default-features = false

# Choose features you need.
features = ["cache", "native_tls_backend"]

许可证

serenity_utils 在ISC许可证下可用。有关更多详细信息,请参阅LICENSE

依赖关系

~6–22MB
~361K SLoC