Struct serenity::prelude::Context[][src]

pub struct Context {
    pub data: Arc<RwLock<TypeMap>>,
    pub shard: ShardMessenger,
    pub shard_id: u64,
    pub http: Arc<Http>,
    pub cache: Arc<Cache>,
}
Expand description

The context is a general utility struct provided on event dispatches, which helps with dealing with the current “context” of the event dispatch. The context also acts as a general high-level interface over the associated Shard which received the event, or the low-level http module.

The context contains “shortcuts”, like for interacting with the shard. Methods like Self::set_activity will unlock the shard and perform an update for you to save a bit of work.

A context will only live for the event it was dispatched for. After the event handler finished, it is destroyed and will not be re-used.

Fields

data: Arc<RwLock<TypeMap>>

A clone of Client::data. Refer to its documentation for more information.

shard: ShardMessenger

The messenger to communicate with the shard runner.

shard_id: u64

The ID of the shard this context is related to.

http: Arc<Http>cache: Arc<Cache>

Implementations

Sets the current user as being Online. This maintains the current activity.

Examples

Set the current user to being online on the shard:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn message(&self, ctx: Context, msg: Message) {
        if msg.content == "!online" {
            ctx.online().await;
        }
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Sets the current user as being Idle. This maintains the current activity.

Examples

Set the current user to being idle on the shard:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn message(&self, ctx: Context, msg: Message) {
        if msg.content == "!idle" {
            ctx.idle().await;
        }
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Sets the current user as being DoNotDisturb. This maintains the current activity.

Examples

Set the current user to being Do Not Disturb on the shard:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn message(&self, ctx: Context, msg: Message) {
        if msg.content == "!dnd" {
            ctx.dnd().await;
        }
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Sets the current user as being Invisible. This maintains the current activity.

Examples

Set the current user to being invisible on the shard when an Event::Ready is received:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn ready(&self, ctx: Context, _: Ready) {
        ctx.invisible().await;
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

“Resets” the current user’s presence, by setting the activity to None and the online status to Online.

Use Self::set_presence for fine-grained control over individual details.

Examples

Reset the presence when an Event::Resumed is received:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn resume(&self, ctx: Context, _: ResumedEvent) {
        ctx.reset_presence().await;
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Sets the current activity, defaulting to an online status of Online.

Examples

Create a command named ~setgame that accepts a name of a game to be playing:

use serenity::model::gateway::Activity;

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn message(&self, ctx: Context, msg: Message) {
        let mut args = msg.content.splitn(2, ' ');

        if let (Some("~setgame"), Some(game)) = (args.next(), args.next()) {
            ctx.set_activity(Activity::playing(game)).await;
        }
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Sets the current user’s presence, providing all fields to be passed.

Examples

Setting the current user as having no activity and being Idle:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn ready(&self, ctx: Context, _: Ready) {
        use serenity::model::user::OnlineStatus;

        ctx.set_presence(None, OnlineStatus::Idle);
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Setting the current user as playing "Heroes of the Storm", while being DoNotDisturb:

struct Handler;

#[serenity::async_trait]
impl EventHandler for Handler {
    async fn ready(&self, context: Context, _: Ready) {
        use serenity::model::gateway::Activity;
        use serenity::model::user::OnlineStatus;

        let activity = Activity::playing("Heroes of the Storm");
        let status = OnlineStatus::DoNotDisturb;

        context.set_presence(Some(activity), status);
    }
}

let mut client = Client::builder("token").event_handler(Handler).await?;

client.start().await?;

Trait Implementations

Performs the conversion.

Performs the conversion.

Performs the conversion.

Performs the conversion.

Performs the conversion.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Performs the conversion.

Should always be Self

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more