class MijDiscord::Events::EventDispatcher

Attributes

threads[R]

Public Class Methods

new(klass, bot) click to toggle source
Calls superclass method MijDiscord::Events::DispatcherBase::new
# File lib/mij-discord/events/basic.rb, line 66
def initialize(klass, bot)
  super(klass)

  @bot, @threads = bot, []
end

Public Instance Methods

execute_callback(callback, event, _) click to toggle source
# File lib/mij-discord/events/basic.rb, line 72
def execute_callback(callback, event, _)
  Thread.new do
    thread = Thread.current

    @threads << thread
    thread[:mij_discord] = "event-#{callback.key}"

    begin
      callback.block.call(event, callback.key)
    rescue LocalJumpError
      # Allow premature return from callback block
    rescue => exc
      @bot.handle_exception(:event, exc, event)

      MijDiscord::LOGGER.error('Events') { 'An error occurred in event callback' }
      MijDiscord::LOGGER.error('Events') { exc }
    ensure
      @threads.delete(thread)
    end
  end
end