58 lines
1.0 KiB
Ruby
58 lines
1.0 KiB
Ruby
require_relative "../../drill"
|
|
|
|
class Plugin
|
|
class DrillPlugin < Plugin
|
|
attr_reader :drills
|
|
|
|
def initialize(ika)
|
|
super
|
|
@drills = {}
|
|
end
|
|
|
|
def handle_message(message)
|
|
return false unless super
|
|
|
|
Message.new(self, message).handle
|
|
end
|
|
|
|
def can_handle_message?(message)
|
|
return true if message.content == "!drill"
|
|
|
|
drills[message.channel.id]&.can_handle_message?(message)
|
|
end
|
|
|
|
class Message
|
|
attr_reader :plugin, :message
|
|
|
|
def initialize(plugin, message)
|
|
@plugin = plugin
|
|
@message = message
|
|
end
|
|
|
|
def content
|
|
message.content
|
|
end
|
|
|
|
def responder
|
|
message.responder
|
|
end
|
|
|
|
def respond(response)
|
|
responder.call response
|
|
end
|
|
|
|
def handle
|
|
drill.handle_message(message)
|
|
end
|
|
|
|
def drill
|
|
drl = plugin.drills[message.channel.id]
|
|
return drl if drl
|
|
|
|
drl = Drill.new responder: responder
|
|
plugin.drills[message.channel.id] = drl
|
|
end
|
|
end
|
|
end
|
|
end
|