Module: DiscordRDA::EventFactory

Defined in:
lib/discord_rda/event/base.rb

Overview

Factory for creating events from Gateway payloads

Constant Summary collapse

EVENT_CLASSES =

Event type to class mapping

{
  'READY' => 'ReadyEvent',
  'RESUMED' => 'ResumedEvent',
  'CHANNEL_CREATE' => 'ChannelCreateEvent',
  'CHANNEL_UPDATE' => 'ChannelUpdateEvent',
  'CHANNEL_DELETE' => 'ChannelDeleteEvent',
  'CHANNEL_PINS_UPDATE' => 'ChannelPinsUpdateEvent',
  'GUILD_CREATE' => 'GuildCreateEvent',
  'GUILD_UPDATE' => 'GuildUpdateEvent',
  'GUILD_DELETE' => 'GuildDeleteEvent',
  'GUILD_BAN_ADD' => 'GuildBanAddEvent',
  'GUILD_BAN_REMOVE' => 'GuildBanRemoveEvent',
  'GUILD_EMOJIS_UPDATE' => 'GuildEmojisUpdateEvent',
  'GUILD_INTEGRATIONS_UPDATE' => 'GuildIntegrationsUpdateEvent',
  'GUILD_MEMBER_ADD' => 'GuildMemberAddEvent',
  'GUILD_MEMBER_REMOVE' => 'GuildMemberRemoveEvent',
  'GUILD_MEMBER_UPDATE' => 'GuildMemberUpdateEvent',
  'GUILD_MEMBERS_CHUNK' => 'GuildMembersChunkEvent',
  'GUILD_ROLE_CREATE' => 'GuildRoleCreateEvent',
  'GUILD_ROLE_UPDATE' => 'GuildRoleUpdateEvent',
  'GUILD_ROLE_DELETE' => 'GuildRoleDeleteEvent',
  'MESSAGE_CREATE' => 'MessageCreateEvent',
  'MESSAGE_UPDATE' => 'MessageUpdateEvent',
  'MESSAGE_DELETE' => 'MessageDeleteEvent',
  'MESSAGE_DELETE_BULK' => 'MessageDeleteBulkEvent',
  'MESSAGE_REACTION_ADD' => 'MessageReactionAddEvent',
  'MESSAGE_REACTION_REMOVE' => 'MessageReactionRemoveEvent',
  'MESSAGE_REACTION_REMOVE_ALL' => 'MessageReactionRemoveAllEvent',
  'MESSAGE_REACTION_REMOVE_EMOJI' => 'MessageReactionRemoveEmojiEvent',
  'PRESENCE_UPDATE' => 'PresenceUpdateEvent',
  'TYPING_START' => 'TypingStartEvent',
  'USER_UPDATE' => 'UserUpdateEvent',
  'VOICE_STATE_UPDATE' => 'VoiceStateUpdateEvent',
  'VOICE_SERVER_UPDATE' => 'VoiceServerUpdateEvent',
  'WEBHOOKS_UPDATE' => 'WebhooksUpdateEvent',
  'INTERACTION_CREATE' => 'InteractionCreateEvent',
  'STAGE_INSTANCE_CREATE' => 'StageInstanceCreateEvent',
  'STAGE_INSTANCE_UPDATE' => 'StageInstanceUpdateEvent',
  'STAGE_INSTANCE_DELETE' => 'StageInstanceDeleteEvent',
  'THREAD_CREATE' => 'ThreadCreateEvent',
  'THREAD_UPDATE' => 'ThreadUpdateEvent',
  'THREAD_DELETE' => 'ThreadDeleteEvent',
  'THREAD_LIST_SYNC' => 'ThreadListSyncEvent',
  'THREAD_MEMBER_UPDATE' => 'ThreadMemberUpdateEvent',
  'THREAD_MEMBERS_UPDATE' => 'ThreadMembersUpdateEvent',
  'GUILD_SCHEDULED_EVENT_CREATE' => 'GuildScheduledEventCreateEvent',
  'GUILD_SCHEDULED_EVENT_UPDATE' => 'GuildScheduledEventUpdateEvent',
  'GUILD_SCHEDULED_EVENT_DELETE' => 'GuildScheduledEventDeleteEvent',
  'GUILD_SCHEDULED_EVENT_USER_ADD' => 'GuildScheduledEventUserAddEvent',
  'GUILD_SCHEDULED_EVENT_USER_REMOVE' => 'GuildScheduledEventUserRemoveEvent',
  'AUTO_MODERATION_RULE_CREATE' => 'AutoModerationRuleCreateEvent',
  'AUTO_MODERATION_RULE_UPDATE' => 'AutoModerationRuleUpdateEvent',
  'AUTO_MODERATION_RULE_DELETE' => 'AutoModerationRuleDeleteEvent',
  'AUTO_MODERATION_ACTION_EXECUTION' => 'AutoModerationActionExecutionEvent',
  'GUILD_AUDIT_LOG_ENTRY_CREATE' => 'GuildAuditLogEntryCreateEvent',
  'ENTITLEMENT_CREATE' => 'EntitlementCreateEvent',
  'ENTITLEMENT_UPDATE' => 'EntitlementUpdateEvent',
  'ENTITLEMENT_DELETE' => 'EntitlementDeleteEvent'
}.freeze

Class Method Summary collapse

Class Method Details

.create(event_type, data, shard_id = 0) ⇒ Event

Create an event from Gateway data

Parameters:

  • event_type (String)

    Event type

  • data (Hash)

    Event data

  • shard_id (Integer) (defaults to: 0)

    Shard ID

Returns:

  • (Event)

    Event instance



163
164
165
166
167
168
169
170
171
# File 'lib/discord_rda/event/base.rb', line 163

def create(event_type, data, shard_id = 0)
  class_name = EVENT_CLASSES[event_type]

  if class_name && Event.const_defined?(class_name)
    Event.const_get(class_name).new(data, shard_id: shard_id)
  else
    Event.new(event_type, data, shard_id: shard_id)
  end
end

.register(event_type, klass) ⇒ void

This method returns an undefined value.

Register a custom event class

Parameters:

  • event_type (String)

    Event type

  • klass (Class)

    Event class



177
178
179
# File 'lib/discord_rda/event/base.rb', line 177

def register(event_type, klass)
  EVENT_CLASSES[event_type] = klass.name
end