All Projects → serenity-rs → Serenity

serenity-rs / Serenity

Licence: isc
A Rust library for the Discord API.

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to Serenity

Discordia
Discord API library written in Lua for the Luvit runtime environment
Stars: ✭ 340 (-75.49%)
Mutual labels:  discord-api, hacktoberfest, discord
Discord.js
discord.js is a powerful Node.js module that allows you to easily interact with the Discord API.
Stars: ✭ 16,432 (+1084.72%)
Mutual labels:  discord-api, hacktoberfest, discord
Bot
A Discord bot for all your needs. With memes, utilities, moderation & more, Fire is the only bot you'll need.
Stars: ✭ 79 (-94.3%)
Mutual labels:  discord-api, hacktoberfest, discord
Javacord
An easy to use multithreaded library for creating Discord bots in Java.
Stars: ✭ 368 (-73.47%)
Mutual labels:  discord-api, hacktoberfest, discord
Coward
🐔 Coward is a Deno module for easy interaction with the Discord API.
Stars: ✭ 65 (-95.31%)
Mutual labels:  discord-api, discord
Thm Discord Bot
TryHackMe Python Bot
Stars: ✭ 53 (-96.18%)
Mutual labels:  hacktoberfest, discord
Genesis
🤖 Warframe Discord Cephalon
Stars: ✭ 67 (-95.17%)
Mutual labels:  hacktoberfest, discord
Discordrpcvs
An extension for Visual Studio 2017 that enables Discord Rich Presence.
Stars: ✭ 77 (-94.45%)
Mutual labels:  discord-api, discord
Community Bot
The bot used on the TypeScript Community discord server
Stars: ✭ 46 (-96.68%)
Mutual labels:  hacktoberfest, discord
Basicbot
A basic example of a Discord Bot written in Python. (discord.py)
Stars: ✭ 73 (-94.74%)
Mutual labels:  discord-api, discord
Nino
🔨 Advanced and cute moderation discord bot as an entry of Discord's Hack Week!
Stars: ✭ 78 (-94.38%)
Mutual labels:  discord-api, discord
Dscord
Discord Library for D
Stars: ✭ 52 (-96.25%)
Mutual labels:  discord-api, discord
Smorebot
SmoreBot is a fun, lightweight, multipurpose bot packed with features.
Stars: ✭ 51 (-96.32%)
Mutual labels:  discord-api, discord
Dimscord
A Discord Bot & REST Library for Nim.
Stars: ✭ 67 (-95.17%)
Mutual labels:  discord-api, discord
Rpc Wine
discord-rpc.dll implementation for Wine allowing your Wine games to interact with your native Discord instance
Stars: ✭ 49 (-96.47%)
Mutual labels:  hacktoberfest, discord
Swiftdiscord
Discord API Client for Swift
Stars: ✭ 103 (-92.57%)
Mutual labels:  discord-api, discord
Discord.js Menu
💬 Easily create Discord.js v12 embed menus with reactions and unlimited customizable pages.
Stars: ✭ 89 (-93.58%)
Mutual labels:  discord-api, discord
Discord Rich Presence Tool
A C++/Qt program that lets you fill in your own custom Discord Rich Presence information for games and activities away from the PC.
Stars: ✭ 91 (-93.44%)
Mutual labels:  discord-api, discord
Openrct2
An open source re-implementation of RollerCoaster Tycoon 2 🎢
Stars: ✭ 10,115 (+629.27%)
Mutual labels:  hacktoberfest, discord
Promcord
📊 Analyze your entire discord guild in grafana using prometheus. Message, User, Game and Voice statistics...
Stars: ✭ 39 (-97.19%)
Mutual labels:  hacktoberfest, discord

ci-badge docs-badge guild-badge crates.io version rust 1.48.0+ badge

serenity

serenity logo

Serenity is a Rust library for the Discord API.

View the examples on how to make and structure a bot.

Serenity supports bot login via the use of Client::builder.

You may also check your tokens prior to login via the use of validate_token.

Once logged in, you may add handlers to your client to dispatch Events, by implementing the handlers in a trait, such as EventHandler::message. This will cause your handler to be called when a Event::MessageCreate is received. Each handler is given a Context, giving information about the event. See the client's module-level documentation.

The Shard is transparently handled by the library, removing unnecessary complexity. Sharded connections are automatically handled for you. See the gateway's documentation for more information.

A Cache is also provided for you. This will be updated automatically for you as data is received from the Discord API via events. When calling a method on a Context, the cache will first be searched for relevant data to avoid unnecessary HTTP requests to the Discord API. For more information, see the cache's module-level documentation.

Note that - although this documentation will try to be as up-to-date and accurate as possible - Discord hosts official documentation. If you need to be sure that some information piece is accurate, refer to their docs.

Example Bot

A basic ping-pong bot looks like:

use serenity::async_trait;
use serenity::client::{Client, Context, EventHandler};
use serenity::model::channel::Message;
use serenity::framework::standard::{
    StandardFramework,
    CommandResult,
    macros::{
        command,
        group
    }
};

use std::env;

#[group]
#[commands(ping)]
struct General;

struct Handler;

#[async_trait]
impl EventHandler for Handler {}

#[tokio::main]
async fn main() {
    let framework = StandardFramework::new()
        .configure(|c| c.prefix("~")) // set the bot's prefix to "~"
        .group(&GENERAL_GROUP);

    // Login with a bot token from the environment
    let token = env::var("DISCORD_TOKEN").expect("token");
    let mut client = Client::builder(token)
        .event_handler(Handler)
        .framework(framework)
        .await
        .expect("Error creating client");

    // start listening for events by starting a single shard
    if let Err(why) = client.start().await {
        println!("An error occurred while running the client: {:?}", why);
    }
}

#[command]
async fn ping(ctx: &Context, msg: &Message) -> CommandResult {
    msg.reply(ctx, "Pong!").await?;

    Ok(())
}

Full Examples

Full examples, detailing and explaining usage of the basic functionality of the library, can be found in the examples directory.

Installation

Add the following to your Cargo.toml file:

[dependencies]
serenity = "0.10"

Serenity supports a minimum of Rust 1.48.

Features

Features can be enabled or disabled by configuring the library through Cargo.toml:

[dependencies.serenity]
default-features = false
features = ["pick", "your", "feature", "names", "here"]
version = "0.10"

The default features are: builder, cache, client, framework, gateway, http, model, standard_framework, utils, and rustls_backend.

There are these alternative default features, they require to set default-features = false:

  • default_tokio_0_2: Uses the default backend with tokio version 0.2.
  • default_native_tls: Uses native_tls_backend instead of the default rustls_backend.
  • default_native_tls_tokio_0_2: Uses native_tls_backend with tokio version 0.2.
  • default_no_backend: Excludes the default backend, pick your own backend instead.

If you are unsure which to pick, use the default features by not setting default-features = false.

The following is a full list of features:

  • builder: The builders used in conjunction with models' methods.
  • cache: The cache will store information about guilds, channels, users, and other data, to avoid performing REST requests. If you are low on RAM, do not enable this.
  • collector: A collector awaits events, such as receiving a message from a user or reactions on a message, and allows for responding to the events in a convenient fashion. Collectors can be configured to enforce certain critera the events must meet.
  • client: A manager for shards and event handlers, abstracting away the work of handling shard events and updating the cache, if enabled.
  • framework: Enables the framework, which is a utility to allow simple command parsing, before/after command execution, prefix setting, and more.
  • gateway: A Shard, used as a higher-level interface for communicating with the Discord gateway over a WebSocket client.
  • http: Functions providing a wrapper over Discord's REST API at a low enough level that optional parameters can be provided at will via a JsonMap.
  • model: Method implementations for models, acting as helper methods over the HTTP functions.
  • standard_framework: A standard, default implementation of the Framework
  • utils: Utility functions for common use cases by users.
  • voice: Enables registering a voice plugin to the client, which will handle actual voice connections from Discord. lavalink-rs or Songbird are recommended voice plugins.
  • default_native_tls: Default features but using native_tls_backend instead of rustls_backend.
  • absolute_ratelimits: Whether the library should use your system clock to avoid ratelimits, or use the interval given by Discord that might be less efficient due to latency in the network. If you turn this feature on, it is recommended to synchronise your clock with an NTP server (such as Google's).
  • unstable_discord_api: Enables features of the Discord API that do not have a stable interface. The features might not have official documentation or are subject to change.

Serenity offers two TLS-backends, rustls_backend by default, you need to pick one if you do not use the default features:

  • rustls_backend: Uses Rustls for all platforms, a pure Rust TLS implementation.
  • native_tls_backend: Uses SChannel on Windows, Secure Transport on macOS, and OpenSSL on other platforms.

If you need to use tokio version 0.2 use the backends below:

  • rustls_tokio_0_2_backend: Combines rustls_backend with tokio version 0.2.
  • native_tls_tokio_0_2_backend: Combines native_tls_backend with tokio version 0.2.

If you want all of the default features except for cache for example, you can list all but that:

[dependencies.serenity]
default-features = false
features = [
    "builder",
    "client",
    "framework",
    "gateway",
    "http",
    "model",
    "standard_framework",
    "utils",
    "rustls_backend",
]
version = "0.10"

Dependencies

If you use the native_tls_backend and you are not developing on macOS or Windows, you will need:

  • openssl

Projects extending Serenity

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].