serenity-utils

A library to provide conversions, prompts and menu functionality for Discord bots created with [serenity].

This library provides implementations to easily:

Installation and Usage

To use this crate, add the following to your Cargo.toml:

toml [dependencies] serenity_utils = "0.1.0"

Note: This crate only supports [serenity]'s async versions and a minimum of Rust 1.39.

Examples

Here are a few examples to use some of [serenity_utils]'s features.

Reaction Prompt

```rust use serenity::{ model::prelude::{ChannelId, Message, ReactionType}, prelude::Context, }; use serenityutils::{prompt::reactionprompt, 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(())

} ```

Menu

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

async fn usemenu(ctx: &Context, msg: &Message) -> Result<(), Error> { let mut pageone = CreateEmbed::default(); page_one.description("Page number one!");

let mut page_two = CreateEmbed::default();
page_two.description("Page number two!");

let pages = [page_one, page_two];

// Creates a new menu.
let mut 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(())

} ```

More Examples

More examples detailing the crate's functionality can be found in the [examples] directory.

Features

Some functionality of this crate is dependent on [serenity]'s features.

The following serenity features are required when using [serenity_utils]:

The following features are optional:

Note: One of rustls_backend and native_tls_backend must be used.

The following optional features are enabled by default: