Git Product home page Git Product logo

serenity-1's Introduction

ci-badge docs-badge guild-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::new.

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::on_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:

#[macro_use] extern crate serenity;

use serenity::client::Client;
use serenity::prelude::EventHandler;
use serenity::framework::standard::StandardFramework;
use std::env;

struct Handler;

impl EventHandler for Handler {}

fn main() {
    // Login with a bot token from the environment
    let mut client = Client::new(&env::var("DISCORD_TOKEN").expect("token"), Handler)
        .expect("Error creating client");
    client.with_framework(StandardFramework::new()
        .configure(|c| c.prefix("~")) // set the bot's prefix to "~"
        .cmd("ping", ping));

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

command!(ping(_context, message) {
    let _ = message.reply("Pong!");
});

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.5"

and to the top of your main.rs:

#[macro_use] extern crate serenity;

Serenity only supports the latest Stable, Beta, and Nightly.

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.5"

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;
  • client: A manager for shards and event handlers, abstracting work away 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 compilation of voice support, so that voice channels can be connected to and audio can be sent/received.

Dependencies

Serenity requires the following dependencies:

  • openssl

Voice

The following dependencies all require the voice feature to be enabled in your Cargo.toml:

  • libsodium (Arch: community/libsodium)
  • opus (Arch: extra/opus)

Voice+ffmpeg:

  • ffmpeg (Arch: extra/ffmpeg)

Voice+youtube-dl:

  • youtube-dl (Arch: community/youtube-dl)

Related Projects

serenity-1's People

Contributors

abalabahaha avatar arcterus avatar arqunis avatar blaenk avatar bond-009 avatar caemor avatar efyang avatar feathrs avatar felixmcfelix avatar fenhl avatar foxbot avatar fuyukai avatar fwrs avatar hsiw avatar imnotbad avatar indiv0 avatar jhelwig avatar joek13 avatar khazhyk avatar kiseii avatar lakelezz avatar mozgiii avatar nabijaczleweli avatar perryprog avatar roughsketch avatar sschroe avatar tahahawa avatar thelearnerofcode avatar timotree3 avatar xentec avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.