pub struct Context {
pub data: Arc<RwLock<TypeMap>>,
pub shard: ShardMessenger,
pub shard_id: ShardId,
pub http: Arc<Http>,
pub cache: Arc<Cache>,
}
client
only.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: ShardId
The ID of the shard this context is related to.
http: Arc<Http>
§cache: Arc<Cache>
cache
only.Implementations§
source§impl Context
impl Context
sourcepub fn dnd(&self)
Available on crate feature gateway
only.
pub fn dnd(&self)
gateway
only.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:
#[serenity::async_trait]
impl EventHandler for Handler {
async fn message(&self, ctx: Context, msg: Message) {
if msg.content == "!dnd" {
ctx.dnd();
}
}
}
sourcepub fn invisible(&self)
Available on crate feature gateway
only.
pub fn invisible(&self)
gateway
only.Sets the current user as being Invisible
. This maintains the current activity.
§Examples
Set the current user to being invisible on the shard:
#[serenity::async_trait]
impl EventHandler for Handler {
async fn message(&self, ctx: Context, msg: Message) {
if msg.content == "!invisible" {
ctx.invisible();
}
}
}
sourcepub fn reset_presence(&self)
Available on crate feature gateway
only.
pub fn reset_presence(&self)
gateway
only.“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 current user’s presence on the shard:
#[serenity::async_trait]
impl EventHandler for Handler {
async fn message(&self, ctx: Context, msg: Message) {
if msg.content == "!reset_presence" {
ctx.reset_presence();
}
}
}
sourcepub fn set_activity(&self, activity: Option<ActivityData>)
Available on crate feature gateway
only.
pub fn set_activity(&self, activity: Option<ActivityData>)
gateway
only.Sets the current activity.
§Examples
Create a command named ~setgame
that accepts a name of a game to be playing:
use serenity::gateway::ActivityData;
#[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(Some(ActivityData::playing(game)));
}
}
}
sourcepub fn set_presence(&self, activity: Option<ActivityData>, status: OnlineStatus)
Available on crate feature gateway
only.
pub fn set_presence(&self, activity: Option<ActivityData>, status: OnlineStatus)
gateway
only.Sets the current user’s presence, providing all fields to be passed.
§Examples
Setting the current user as having no activity and being Idle
:
#[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);
}
}
Setting the current user as playing "Heroes of the Storm"
, while being DoNotDisturb
:
#[serenity::async_trait]
impl EventHandler for Handler {
async fn ready(&self, context: Context, _: Ready) {
use serenity::gateway::ActivityData;
use serenity::model::user::OnlineStatus;
let activity = ActivityData::playing("Heroes of the Storm");
let status = OnlineStatus::DoNotDisturb;
context.set_presence(Some(activity), status);
}
}
Trait Implementations§
source§impl AsRef<ShardMessenger> for Context
Available on crate feature gateway
only.
impl AsRef<ShardMessenger> for Context
gateway
only.