Module: Discordrb::EventContainer
Overview
This module provides the functionality required for events and awaits. It is separated from the Bot class so users can make their own container modules and include them.
Class Method Summary collapse
-
.class_from_string(str) ⇒ Class
Utility method to return a class object from a string of its name.
-
.event_class(handler_class) ⇒ Class?
Returns the event class for a handler class type.
-
.handler_class(event_class) ⇒ Class
Returns the handler class for an event class type.
Instance Method Summary collapse
-
#add_handler(handler) ⇒ Object
(also: #<<)
Adds an event handler to this container.
-
#await(attributes = {}) {|event| ... } ⇒ AwaitEventHandler
This event is raised when an Await is triggered.
-
#channel_create(attributes = {}) {|event| ... } ⇒ ChannelCreateEventHandler
This event is raised when a channel is created.
-
#channel_delete(attributes = {}) {|event| ... } ⇒ ChannelDeleteEventHandler
This event is raised when a channel is deleted.
-
#channel_recipient_add(attributes = {}) {|event| ... } ⇒ ChannelRecipientAddHandler
This event is raised when a recipient is added to a group channel.
-
#channel_recipient_remove(attributes = {}) {|event| ... } ⇒ ChannelRecipientRemoveHandler
This event is raised when a recipient is removed from a group channel.
-
#channel_update(attributes = {}) {|event| ... } ⇒ ChannelUpdateEventHandler
This event is raised when a channel is updated.
-
#clear! ⇒ Object
Removes all events from this event handler.
-
#disconnected(attributes = {}) {|event| ... } ⇒ DisconnectEventHandler
This event is raised when the bot has disconnected from the WebSocket, due to the Bot#stop method or external causes.
-
#heartbeat(attributes = {}) {|event| ... } ⇒ HeartbeatEventHandler
This event is raised every time the bot sends a heartbeat over the galaxy.
-
#include_events(container) ⇒ Object
(also: #include!)
Adds all event handlers from another container into this one.
-
#member_join(attributes = {}) {|event| ... } ⇒ ServerMemberAddEventHandler
This event is raised when a new user joins a server.
-
#member_leave(attributes = {}) {|event| ... } ⇒ ServerMemberDeleteEventHandler
This event is raised when a member leaves a server.
-
#member_update(attributes = {}) {|event| ... } ⇒ ServerMemberUpdateEventHandler
This event is raised when a member update happens.
-
#mention(attributes = {}) {|event| ... } ⇒ MentionEventHandler
This event is raised when the bot is mentioned in a message.
-
#message(attributes = {}) {|event| ... } ⇒ MessageEventHandler
This event is raised when a message is sent to a text channel the bot is currently in.
-
#message_delete(attributes = {}) {|event| ... } ⇒ MessageDeleteEventHandler
This event is raised when a message is deleted in a channel.
-
#message_edit(attributes = {}) {|event| ... } ⇒ MessageEditEventHandler
This event is raised when a message is edited in a channel.
-
#message_update(attributes = {}) {|event| ... } ⇒ MessageUpdateEventHandler
This event is raised whenever a message is updated.
-
#playing(attributes = {}) {|event| ... } ⇒ PlayingEventHandler
This event is raised when the game a user is playing changes.
-
#pm(attributes = {}) {|event| ... } ⇒ PrivateMessageEventHandler
(also: #private_message, #direct_message, #dm)
This event is raised when a private message is sent to the bot.
-
#presence(attributes = {}) {|event| ... } ⇒ PresenceEventHandler
This event is raised when a user's status (online/offline/idle) changes.
-
#raw(attributes = {}) {|event| ... } ⇒ RawEventHandler
This event is raised for every dispatch received over the gateway, whether supported by discordrb or not.
-
#reaction_add(attributes = {}) {|event| ... } ⇒ ReactionAddEventHandler
This event is raised when somebody reacts to a message.
-
#reaction_remove(attributes = {}) {|event| ... } ⇒ ReactionRemoveEventHandler
This event is raised when somebody removes a reaction from a message.
-
#reaction_remove_all(attributes = {}) {|event| ... } ⇒ ReactionRemoveAllEventHandler
This event is raised when somebody removes all reactions from a message.
-
#ready(attributes = {}) {|event| ... } ⇒ ReadyEventHandler
This event is raised when the READY packet is received, i.e.
-
#remove_handler(handler) ⇒ Object
Removes an event handler from this container.
-
#server_create(attributes = {}) {|event| ... } ⇒ ServerCreateEventHandler
This event is raised when a server is created respective to the bot, i.e.
-
#server_delete(attributes = {}) {|event| ... } ⇒ ServerDeleteEventHandler
This event is raised when a server is deleted, or when the bot leaves a server.
-
#server_emoji(attributes = {}) {|event| ... } ⇒ ServerEmojiChangeEventHandler
This event is raised when an emoji or collection of emojis is created/deleted/updated.
-
#server_emoji_create(attributes = {}) {|event| ... } ⇒ ServerEmojiCreateEventHandler
This event is raised when an emoji is created.
-
#server_emoji_delete(attributes = {}) {|event| ... } ⇒ ServerEmojiDeleteEventHandler
This event is raised when an emoji is deleted.
-
#server_emoji_update(attributes = {}) {|event| ... } ⇒ ServerEmojiUpdateEventHandler
This event is raised when an emoji is updated.
-
#server_role_create(attributes = {}) {|event| ... } ⇒ ServerRoleCreateEventHandler
This event is raised when a role is created.
-
#server_role_delete(attributes = {}) {|event| ... } ⇒ ServerRoleDeleteEventHandler
This event is raised when a role is deleted.
-
#server_role_update(attributes = {}) {|event| ... } ⇒ ServerRoleUpdateEventHandler
This event is raised when a role is updated.
-
#server_update(attributes = {}) {|event| ... } ⇒ ServerUpdateEventHandler
This event is raised when a server is updated, for example if the name or region has changed.
-
#typing(attributes = {}) {|event| ... } ⇒ TypingEventHandler
This event is raised when somebody starts typing in a channel the bot is also in.
-
#unknown(attributes = {}) {|event| ... } ⇒ UnknownEventHandler
This event is raised for a dispatch received over the gateway that is not currently handled otherwise by discordrb.
-
#user_ban(attributes = {}) {|event| ... } ⇒ UserBanEventHandler
This event is raised when a user is banned from a server.
-
#user_unban(attributes = {}) {|event| ... } ⇒ UserUnbanEventHandler
This event is raised when a user is unbanned from a server.
-
#voice_state_update(attributes = {}) {|event| ... } ⇒ VoiceStateUpdateEventHandler
This event is raised when a user's voice state changes.
-
#webhook_update(attributes = {}) {|event| ... } ⇒ WebhookUpdateEventHandler
This event is raised when a webhook is updated.
Methods included from Events
Class Method Details
.class_from_string(str) ⇒ Class
Utility method to return a class object from a string of its name. Mostly useful for internal stuff
559 560 561 562 563 |
# File 'lib/discordrb/container.rb', line 559 def self.class_from_string(str) str.split('::').inject(Object) do |mod, class_name| mod.const_get(class_name) end end |
.event_class(handler_class) ⇒ Class?
Returns the event class for a handler class type
549 550 551 552 553 554 |
# File 'lib/discordrb/container.rb', line 549 def self.event_class(handler_class) class_name = handler_class.to_s return nil unless class_name.end_with? 'Handler' EventContainer.class_from_string(class_name[0..-8]) end |
.handler_class(event_class) ⇒ Class
Returns the handler class for an event class type
541 542 543 |
# File 'lib/discordrb/container.rb', line 541 def self.handler_class(event_class) class_from_string(event_class.to_s + 'Handler') end |
Instance Method Details
#add_handler(handler) ⇒ Object Also known as: <<
Adds an event handler to this container. Usually, it's more expressive to just use one of the shorthand adder methods like #message, but if you want to create one manually you can use this.
517 518 519 520 521 522 |
# File 'lib/discordrb/container.rb', line 517 def add_handler(handler) clazz = EventContainer.event_class(handler.class) @event_handlers ||= {} @event_handlers[clazz] ||= [] @event_handlers[clazz] << handler end |
#await(attributes = {}) {|event| ... } ⇒ AwaitEventHandler
This event is raised when an Await is triggered. It provides an easy way to execute code on an await without having to rely on the await's block.
453 454 455 |
# File 'lib/discordrb/container.rb', line 453 def await(attributes = {}, &block) register_event(AwaitEvent, attributes, block) end |
#channel_create(attributes = {}) {|event| ... } ⇒ ChannelCreateEventHandler
This event is raised when a channel is created.
204 205 206 |
# File 'lib/discordrb/container.rb', line 204 def channel_create(attributes = {}, &block) register_event(ChannelCreateEvent, attributes, block) end |
#channel_delete(attributes = {}) {|event| ... } ⇒ ChannelDeleteEventHandler
This event is raised when a channel is deleted.
226 227 228 |
# File 'lib/discordrb/container.rb', line 226 def channel_delete(attributes = {}, &block) register_event(ChannelDeleteEvent, attributes, block) end |
#channel_recipient_add(attributes = {}) {|event| ... } ⇒ ChannelRecipientAddHandler
This event is raised when a recipient is added to a group channel.
238 239 240 |
# File 'lib/discordrb/container.rb', line 238 def channel_recipient_add(attributes = {}, &block) register_event(ChannelRecipientAddEvent, attributes, block) end |
#channel_recipient_remove(attributes = {}) {|event| ... } ⇒ ChannelRecipientRemoveHandler
This event is raised when a recipient is removed from a group channel.
250 251 252 |
# File 'lib/discordrb/container.rb', line 250 def channel_recipient_remove(attributes = {}, &block) register_event(ChannelRecipientRemoveEvent, attributes, block) end |
#channel_update(attributes = {}) {|event| ... } ⇒ ChannelUpdateEventHandler
This event is raised when a channel is updated.
215 216 217 |
# File 'lib/discordrb/container.rb', line 215 def channel_update(attributes = {}, &block) register_event(ChannelUpdateEvent, attributes, block) end |
#clear! ⇒ Object
Removes all events from this event handler.
510 511 512 |
# File 'lib/discordrb/container.rb', line 510 def clear! @event_handlers&.clear end |
#disconnected(attributes = {}) {|event| ... } ⇒ DisconnectEventHandler
This event is raised when the bot has disconnected from the WebSocket, due to the Bot#stop method or external causes. It's the recommended way to do clean-up tasks.
56 57 58 |
# File 'lib/discordrb/container.rb', line 56 def disconnected(attributes = {}, &block) register_event(DisconnectEvent, attributes, block) end |
#heartbeat(attributes = {}) {|event| ... } ⇒ HeartbeatEventHandler
This event is raised every time the bot sends a heartbeat over the galaxy. This happens roughly every 40 seconds, but may happen at a lower rate should Discord change their interval. It may also happen more quickly for periods of time, especially for unstable connections, since discordrb rather sends a heartbeat than not if there's a choice. (You shouldn't rely on all this to be accurately timed.)
All this makes this event useful to periodically trigger something, like doing some API request every hour, setting some kind of uptime variable or whatever else. The only limit is yourself.
71 72 73 |
# File 'lib/discordrb/container.rb', line 71 def heartbeat(attributes = {}, &block) register_event(HeartbeatEvent, attributes, block) end |
#include_events(container) ⇒ Object Also known as: include!
Adds all event handlers from another container into this one. Existing event handlers will be overwritten.
526 527 528 529 530 531 532 |
# File 'lib/discordrb/container.rb', line 526 def include_events(container) handlers = container.instance_variable_get '@event_handlers' return unless handlers @event_handlers ||= {} @event_handlers.merge!(handlers) { |_, old, new| old + new } end |
#member_join(attributes = {}) {|event| ... } ⇒ ServerMemberAddEventHandler
This event is raised when a new user joins a server.
277 278 279 |
# File 'lib/discordrb/container.rb', line 277 def member_join(attributes = {}, &block) register_event(ServerMemberAddEvent, attributes, block) end |
#member_leave(attributes = {}) {|event| ... } ⇒ ServerMemberDeleteEventHandler
This event is raised when a member leaves a server.
298 299 300 |
# File 'lib/discordrb/container.rb', line 298 def member_leave(attributes = {}, &block) register_event(ServerMemberDeleteEvent, attributes, block) end |
#member_update(attributes = {}) {|event| ... } ⇒ ServerMemberUpdateEventHandler
This event is raised when a member update happens. This includes when a members nickname or roles are updated.
288 289 290 |
# File 'lib/discordrb/container.rb', line 288 def member_update(attributes = {}, &block) register_event(ServerMemberUpdateEvent, attributes, block) end |
#mention(attributes = {}) {|event| ... } ⇒ MentionEventHandler
This event is raised when the bot is mentioned in a message.
193 194 195 |
# File 'lib/discordrb/container.rb', line 193 def mention(attributes = {}, &block) register_event(MentionEvent, attributes, block) end |
#message(attributes = {}) {|event| ... } ⇒ MessageEventHandler
This event is raised when a message is sent to a text channel the bot is currently in.
36 37 38 |
# File 'lib/discordrb/container.rb', line 36 def (attributes = {}, &block) register_event(MessageEvent, attributes, block) end |
#message_delete(attributes = {}) {|event| ... } ⇒ MessageDeleteEventHandler
This event is raised when a message is deleted in a channel.
108 109 110 |
# File 'lib/discordrb/container.rb', line 108 def (attributes = {}, &block) register_event(MessageDeleteEvent, attributes, block) end |
#message_edit(attributes = {}) {|event| ... } ⇒ MessageEditEventHandler
This event is raised when a message is edited in a channel.
97 98 99 |
# File 'lib/discordrb/container.rb', line 97 def (attributes = {}, &block) register_event(MessageEditEvent, attributes, block) end |
#message_update(attributes = {}) {|event| ... } ⇒ MessageUpdateEventHandler
This event is raised whenever a message is updated. Message updates can be triggered from a user editing their own message, or from Discord automatically attaching embeds to the user's message for URLs contained in the message's content. If you only want to listen for users editing their own messages, use the #message_edit handler instead.
122 123 124 |
# File 'lib/discordrb/container.rb', line 122 def (attributes = {}, &block) register_event(MessageUpdateEvent, attributes, block) end |
#playing(attributes = {}) {|event| ... } ⇒ PlayingEventHandler
This event is raised when the game a user is playing changes.
175 176 177 |
# File 'lib/discordrb/container.rb', line 175 def (attributes = {}, &block) register_event(PlayingEvent, attributes, block) end |
#pm(attributes = {}) {|event| ... } ⇒ PrivateMessageEventHandler Also known as: private_message, direct_message, dm
This event is raised when a private message is sent to the bot.
471 472 473 |
# File 'lib/discordrb/container.rb', line 471 def pm(attributes = {}, &block) register_event(PrivateMessageEvent, attributes, block) end |
#presence(attributes = {}) {|event| ... } ⇒ PresenceEventHandler
This event is raised when a user's status (online/offline/idle) changes.
163 164 165 |
# File 'lib/discordrb/container.rb', line 163 def presence(attributes = {}, &block) register_event(PresenceEvent, attributes, block) end |
#raw(attributes = {}) {|event| ... } ⇒ RawEventHandler
This event is raised for every dispatch received over the gateway, whether supported by discordrb or not.
485 486 487 |
# File 'lib/discordrb/container.rb', line 485 def raw(attributes = {}, &block) register_event(RawEvent, attributes, block) end |
#reaction_add(attributes = {}) {|event| ... } ⇒ ReactionAddEventHandler
This event is raised when somebody reacts to a message.
132 133 134 |
# File 'lib/discordrb/container.rb', line 132 def reaction_add(attributes = {}, &block) register_event(ReactionAddEvent, attributes, block) end |
#reaction_remove(attributes = {}) {|event| ... } ⇒ ReactionRemoveEventHandler
This event is raised when somebody removes a reaction from a message.
143 144 145 |
# File 'lib/discordrb/container.rb', line 143 def reaction_remove(attributes = {}, &block) register_event(ReactionRemoveEvent, attributes, block) end |
#reaction_remove_all(attributes = {}) {|event| ... } ⇒ ReactionRemoveAllEventHandler
This event is raised when somebody removes all reactions from a message.
152 153 154 |
# File 'lib/discordrb/container.rb', line 152 def reaction_remove_all(attributes = {}, &block) register_event(ReactionRemoveAllEvent, attributes, block) end |
#ready(attributes = {}) {|event| ... } ⇒ ReadyEventHandler
This event is raised when the READY packet is received, i.e. servers and channels have finished initialization. It's the recommended way to do things when the bot has finished starting up.
46 47 48 |
# File 'lib/discordrb/container.rb', line 46 def ready(attributes = {}, &block) register_event(ReadyEvent, attributes, block) end |
#remove_handler(handler) ⇒ Object
Removes an event handler from this container. If you're looking for a way to do temporary events, I recommend Awaits instead of this.
503 504 505 506 507 |
# File 'lib/discordrb/container.rb', line 503 def remove_handler(handler) clazz = EventContainer.event_class(handler.class) @event_handlers ||= {} @event_handlers[clazz].delete(handler) end |
#server_create(attributes = {}) {|event| ... } ⇒ ServerCreateEventHandler
This event is raised when a server is created respective to the bot, i.e. the bot joins a server or creates a new one itself.
331 332 333 |
# File 'lib/discordrb/container.rb', line 331 def server_create(attributes = {}, &block) register_event(ServerCreateEvent, attributes, block) end |
#server_delete(attributes = {}) {|event| ... } ⇒ ServerDeleteEventHandler
This event is raised when a server is deleted, or when the bot leaves a server. (These two cases are identical to Discord.)
352 353 354 |
# File 'lib/discordrb/container.rb', line 352 def server_delete(attributes = {}, &block) register_event(ServerDeleteEvent, attributes, block) end |
#server_emoji(attributes = {}) {|event| ... } ⇒ ServerEmojiChangeEventHandler
This event is raised when an emoji or collection of emojis is created/deleted/updated.
362 363 364 |
# File 'lib/discordrb/container.rb', line 362 def server_emoji(attributes = {}, &block) register_event(ServerEmojiChangeEvent, attributes, block) end |
#server_emoji_create(attributes = {}) {|event| ... } ⇒ ServerEmojiCreateEventHandler
This event is raised when an emoji is created.
374 375 376 |
# File 'lib/discordrb/container.rb', line 374 def server_emoji_create(attributes = {}, &block) register_event(ServerEmojiCreateEvent, attributes, block) end |
#server_emoji_delete(attributes = {}) {|event| ... } ⇒ ServerEmojiDeleteEventHandler
This event is raised when an emoji is deleted.
386 387 388 |
# File 'lib/discordrb/container.rb', line 386 def server_emoji_delete(attributes = {}, &block) register_event(ServerEmojiDeleteEvent, attributes, block) end |
#server_emoji_update(attributes = {}) {|event| ... } ⇒ ServerEmojiUpdateEventHandler
This event is raised when an emoji is updated.
399 400 401 |
# File 'lib/discordrb/container.rb', line 399 def server_emoji_update(attributes = {}, &block) register_event(ServerEmojiUpdateEvent, attributes, block) end |
#server_role_create(attributes = {}) {|event| ... } ⇒ ServerRoleCreateEventHandler
This event is raised when a role is created.
409 410 411 |
# File 'lib/discordrb/container.rb', line 409 def server_role_create(attributes = {}, &block) register_event(ServerRoleCreateEvent, attributes, block) end |
#server_role_delete(attributes = {}) {|event| ... } ⇒ ServerRoleDeleteEventHandler
This event is raised when a role is deleted.
419 420 421 |
# File 'lib/discordrb/container.rb', line 419 def server_role_delete(attributes = {}, &block) register_event(ServerRoleDeleteEvent, attributes, block) end |
#server_role_update(attributes = {}) {|event| ... } ⇒ ServerRoleUpdateEventHandler
This event is raised when a role is updated.
429 430 431 |
# File 'lib/discordrb/container.rb', line 429 def server_role_update(attributes = {}, &block) register_event(ServerRoleUpdateEvent, attributes, block) end |
#server_update(attributes = {}) {|event| ... } ⇒ ServerUpdateEventHandler
This event is raised when a server is updated, for example if the name or region has changed.
341 342 343 |
# File 'lib/discordrb/container.rb', line 341 def server_update(attributes = {}, &block) register_event(ServerUpdateEvent, attributes, block) end |
#typing(attributes = {}) {|event| ... } ⇒ TypingEventHandler
This event is raised when somebody starts typing in a channel the bot is also in. The official Discord client would display the typing indicator for five seconds after receiving this event. If the user continues typing after five seconds, the event will be re-raised.
86 87 88 |
# File 'lib/discordrb/container.rb', line 86 def typing(attributes = {}, &block) register_event(TypingEvent, attributes, block) end |
#unknown(attributes = {}) {|event| ... } ⇒ UnknownEventHandler
This event is raised for a dispatch received over the gateway that is not currently handled otherwise by discordrb.
496 497 498 |
# File 'lib/discordrb/container.rb', line 496 def unknown(attributes = {}, &block) register_event(UnknownEvent, attributes, block) end |
#user_ban(attributes = {}) {|event| ... } ⇒ UserBanEventHandler
This event is raised when a user is banned from a server.
309 310 311 |
# File 'lib/discordrb/container.rb', line 309 def user_ban(attributes = {}, &block) register_event(UserBanEvent, attributes, block) end |
#user_unban(attributes = {}) {|event| ... } ⇒ UserUnbanEventHandler
This event is raised when a user is unbanned from a server.
320 321 322 |
# File 'lib/discordrb/container.rb', line 320 def user_unban(attributes = {}, &block) register_event(UserUnbanEvent, attributes, block) end |
#voice_state_update(attributes = {}) {|event| ... } ⇒ VoiceStateUpdateEventHandler
This event is raised when a user's voice state changes. This includes when a user joins, leaves, or moves between voice channels, as well as their mute and deaf status for themselves and on the server.
267 268 269 |
# File 'lib/discordrb/container.rb', line 267 def voice_state_update(attributes = {}, &block) register_event(VoiceStateUpdateEvent, attributes, block) end |
#webhook_update(attributes = {}) {|event| ... } ⇒ WebhookUpdateEventHandler
This event is raised when a webhook is updated.
441 442 443 |
# File 'lib/discordrb/container.rb', line 441 def webhook_update(attributes = {}, &block) register_event(WebhookUpdateEvent, attributes, block) end |