#shuttle-service #serenity

shuttle-serenity

Service implementation to run a serenity server on shuttle

22 breaking releases

new 0.34.0 Nov 23, 2023
0.32.0 Nov 9, 2023
0.22.0 Jul 31, 2023
0.13.0 Mar 27, 2023

#440 in Network programming

Download history 98/week @ 2023-08-03 153/week @ 2023-08-10 147/week @ 2023-08-17 139/week @ 2023-08-24 104/week @ 2023-08-31 217/week @ 2023-09-07 192/week @ 2023-09-14 159/week @ 2023-09-21 147/week @ 2023-09-28 181/week @ 2023-10-05 217/week @ 2023-10-12 339/week @ 2023-10-19 275/week @ 2023-10-26 261/week @ 2023-11-02 319/week @ 2023-11-09 236/week @ 2023-11-16

1,136 downloads per month

Apache-2.0

7KB

Shuttle service integration for the Serenity discord bot framework.

Example

use anyhow::anyhow;
use serenity::async_trait;
use serenity::model::channel::Message;
use serenity::model::gateway::Ready;
use serenity::prelude::*;
use shuttle_secrets::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_secrets::Secrets] secret_store: SecretStore,
) -> shuttle_serenity::ShuttleSerenity {
    // Get the discord token set in `Secrets.toml`
    let token = if let Some(token) = secret_store.get("DISCORD_TOKEN") {
        token
    } else {
        return Err(anyhow!("'DISCORD_TOKEN' was not found").into());
    };

    // 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

~29–46MB
~1M SLoC