32 breaking releases

new 0.44.0 Apr 23, 2024
0.42.0 Mar 18, 2024
0.35.2 Dec 21, 2023
0.34.1 Nov 29, 2023
0.13.0 Mar 27, 2023

#720 in Network programming

Download history 44/week @ 2024-01-01 120/week @ 2024-01-08 106/week @ 2024-01-15 159/week @ 2024-01-22 96/week @ 2024-01-29 78/week @ 2024-02-05 273/week @ 2024-02-12 179/week @ 2024-02-19 353/week @ 2024-02-26 457/week @ 2024-03-04 863/week @ 2024-03-11 295/week @ 2024-03-18 196/week @ 2024-03-25 666/week @ 2024-04-01 180/week @ 2024-04-08 276/week @ 2024-04-15

1,350 downloads per month

Apache-2.0

33KB
486 lines

Shuttle service integration for the Serenity Discord bot framework

Serenity 0.12 is used by default. Poise 0.6 is also supported.

Serenity 0.11 is supported by using these feature flags (native TLS also available):

serenity = { version = "0.11.7", features = ["..."] }
shuttle-serenity = { version = "0.44.0", default-features = false, features = ["serenity-0-11-rustls_backend"] }

Example

use anyhow::Context as _;
use serenity::async_trait;
use serenity::model::channel::Message;
use serenity::model::gateway::Ready;
use serenity::prelude::*;
use shuttle_runtime::SecretStore;
use tracing::{error, info};

struct Bot;

#[async_trait]
impl EventHandler for Bot {
    async fn message(&self, ctx: Context, msg: Message) {
        if msg.content == "!hello" {
            if let Err(e) = msg.channel_id.say(&ctx.http, "world!").await {
                error!("Error sending message: {:?}", e);
            }
        }
    }

    async fn ready(&self, _: Context, ready: Ready) {
        info!("{} is connected!", ready.user.name);
    }
}

#[shuttle_runtime::main]
async fn serenity(
    #[shuttle_runtime::Secrets] secrets: SecretStore,
) -> shuttle_serenity::ShuttleSerenity {
    // Get the discord token set in `Secrets.toml`
    let token = secrets.get("DISCORD_TOKEN").context("'DISCORD_TOKEN' was not found")?;

    // Set gateway intents, which decides what events the bot will be notified about
    let intents = GatewayIntents::GUILD_MESSAGES | GatewayIntents::MESSAGE_CONTENT;

    let client = Client::builder(&token, intents)
        .event_handler(Bot)
        .await
        .expect("Err creating client");

    Ok(client.into())
}

Dependencies

~13–30MB
~491K SLoC