Struct serenity::gateway::Shard[][src]

pub struct Shard {
    pub client: WsClient,
    pub started: Instant,
    pub token: Arc<Mutex<String>>,
    // some fields omitted
}

A Shard is a higher-level handler for a websocket connection to Discord's gateway. The shard allows for sending and receiving messages over the websocket, such as setting the active game, reconnecting, syncing guilds, and more.

Refer to the module-level documentation for information on effectively using multiple shards, if you need to.

Note that there are additional methods available if you are manually managing a shard yourself, although they are hidden from the documentation since there are few use cases for doing such.

Stand-alone shards

You may instantiate a shard yourself - decoupled from the Client - if you need to. For most use cases, you will not need to do this, and you can leave the client to do it.

This can be done by passing in the required parameters to new. You can then manually handle the shard yourself and receive events via receive.

Note: You really do not need to do this. Just call one of the appropriate methods on the Client.

Examples

See the documentation for new on how to use this.

Fields

Instant of when the shard was started.

Methods

impl Shard
[src]

Instantiates a new instance of a Shard, bypassing the client.

Note: You should likely never need to do this yourself.

Examples

Instantiating a new Shard manually for a bot with no shards, and then listening for events:

extern crate parking_lot;
extern crate serenity;
use parking_lot::Mutex;
use serenity::gateway::Shard;
use serenity::http;
use std::env;
use std::sync::Arc;

let token = Arc::new(Mutex::new(env::var("DISCORD_BOT_TOKEN")?));
// retrieve the gateway response, which contains the URL to connect to
let gateway = Arc::new(Mutex::new(http::get_gateway()?.url));
let shard = Shard::new(gateway, token, [0, 1])?;

// at this point, you can create a `loop`, and receive events and match
// their variants

Retrieves the current presence of the shard.

Whether the shard has permanently shutdown.

This should normally happen due to manual calling of shutdown or shutdown_clean.

Retrieves the heartbeat instants of the shard.

This is the time of when a heartbeat was sent and when an acknowledgement was last received.

Retrieves the value of when the last heartbeat was sent.

Retrieves the value of when the last heartbeat ack was received.

Sends a heartbeat to the gateway with the current sequence.

This sets the last heartbeat time to now, and last_heartbeat_acknowledged to false.

Errors

Returns GatewayError::HeartbeatFailed if there was an error sending a heartbeat.

use serenity::model::gateway::Game;

shard.set_game(Some(Game::playing("Heroes of the Storm")));

Retrieves a copy of the current shard information.

The first element is the current shard - 0-indexed - while the second element is the total number of shards -- 1-indexed.

For example, if using 3 shards in total, and if this is shard 1, then it can be read as "the second of three shards".

Examples

Retrieving the shard info for the second shard, out of two shards total:

assert_eq!(shard.shard_info(), [1, 2]);

Returns the current connection stage of the shard.

Checks whether a heartbeat needs to be sent, as well as whether a heartbeat acknowledgement was received.

true is returned under one of the following conditions:

  • the heartbeat interval has not elapsed
  • a heartbeat was successfully sent
  • there is no known heartbeat interval yet

false is returned under one of the following conditions:

  • a heartbeat acknowledgement was not received in time
  • an error occurred while heartbeating

Calculates the heartbeat latency between the shard and the gateway.

Performs a deterministic reconnect.

The type of reconnect is deterministic on whether a session_id.

If the session_id still exists, then a RESUME is sent. If not, then an IDENTIFY is sent.

Note that, if the shard is already in a stage of ConnectionStage::Connecting, then no action will be performed.

Requests that one or multiple Guilds be chunked.

This will ask the gateway to start sending member chunks for large guilds (250 members+). If a guild is over 250 members, then a full member list will not be downloaded, and must instead be requested to be sent in "chunks" containing members.

Member chunks are sent as the Event::GuildMembersChunk event. Each chunk only contains a partial amount of the total members.

If the cache feature is enabled, the cache will automatically be updated with member chunks.

Examples

Chunk a single guild by Id, limiting to 2000 Members, and not specifying a query parameter:

use serenity::model::id::GuildId;

let guild_ids = vec![GuildId(81384788765712384)];

shard.chunk_guilds(guild_ids, Some(2000), None);

Chunk a single guild by Id, limiting to 20 members, and specifying a query parameter of "do":

use serenity::model::id::GuildId;

let guild_ids = vec![GuildId(81384788765712384)];

shard.chunk_guilds(guild_ids, Some(20), Some("do"));

Initializes a new WebSocket client.

This will set the stage of the shard before and after instantiation of the client.

Auto Trait Implementations

impl Send for Shard

impl !Sync for Shard