41 breaking releases
new 0.53.0 | Mar 12, 2025 |
---|---|
0.51.0 | Jan 10, 2025 |
0.49.0 | Nov 12, 2024 |
0.47.0 | Jul 23, 2024 |
0.13.0 | Mar 27, 2023 |
#1469 in Web programming
1,916 downloads per month
Used in 2 crates
66KB
867 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 = "...", 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
~482K SLoC