Compare commits
No commits in common. "0df41a7aae23246d198ec18e6c42c3dc37b03680" and "f6839fe42ae14623f924f65ca52bc9b8e5b42c21" have entirely different histories.
0df41a7aae
...
f6839fe42a
@ -1,9 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'discordrb'
|
|
||||||
require_relative '../lib/ika'
|
|
||||||
require_relative '../lib/console_handler'
|
|
||||||
|
|
||||||
ika = Ika.for(type: ConsoleHandler)
|
|
||||||
|
|
||||||
ika.start!
|
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env ruby
|
|
||||||
|
|
||||||
require 'discordrb'
|
|
||||||
require_relative '../lib/ika'
|
|
||||||
require_relative '../lib/discord_handler'
|
|
||||||
|
|
||||||
token = File.read("./token")
|
|
||||||
|
|
||||||
bot = Discordrb::Bot.new(token:)
|
|
||||||
|
|
||||||
ika = Ika.for(type: DiscordHandler, bot:)
|
|
||||||
|
|
||||||
ika.start!
|
|
8
ika.rb
Normal file
8
ika.rb
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
require 'discordrb'
|
||||||
|
require_relative './lib/ika'
|
||||||
|
|
||||||
|
token = File.read("./token")
|
||||||
|
|
||||||
|
ika = Ika.new Discordrb::Bot.new(token:)
|
||||||
|
|
||||||
|
ika.start!
|
4
lib/commands.rb
Normal file
4
lib/commands.rb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
require_relative "commands/command"
|
||||||
|
require_relative "commands/help_command"
|
||||||
|
require_relative "commands/lesson_command"
|
||||||
|
require_relative "commands/stop_lesson_command"
|
46
lib/commands/command.rb
Normal file
46
lib/commands/command.rb
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
module Commands
|
||||||
|
@@commands = []
|
||||||
|
|
||||||
|
def self.register_command(command_class)
|
||||||
|
@@commands << command_class
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.registered_commands
|
||||||
|
@@commands
|
||||||
|
end
|
||||||
|
|
||||||
|
class Command
|
||||||
|
def self.inherited(klass)
|
||||||
|
Commands.register_command klass
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.for(ika, message)
|
||||||
|
Commands.registered_commands.find do |command_class|
|
||||||
|
command_class.matches? message.message.content
|
||||||
|
end&.new(ika, message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.matches?(message_text)
|
||||||
|
message_text == "!#{command_string}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.help
|
||||||
|
"!#{command_string} - #{description}"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.description
|
||||||
|
"blah blah blah"
|
||||||
|
end
|
||||||
|
|
||||||
|
attr_reader :ika, :message
|
||||||
|
|
||||||
|
def initialize(ika, message)
|
||||||
|
@ika = ika
|
||||||
|
@message = message
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
puts "This is a generic command! I can't execute anything!"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
16
lib/commands/help_command.rb
Normal file
16
lib/commands/help_command.rb
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
module Commands
|
||||||
|
class Help < Command
|
||||||
|
def self.command_string
|
||||||
|
"help"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.description
|
||||||
|
"Shows you a list of available commands"
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
message.respond ["I'm Ika! Here are the commands I know:",
|
||||||
|
*Commands.registered_commands.map(&:help)].join("\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
18
lib/commands/lesson_command.rb
Normal file
18
lib/commands/lesson_command.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module Commands
|
||||||
|
class LessonCommand < Command
|
||||||
|
def self.command_string
|
||||||
|
"lesson"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.description
|
||||||
|
"Starts timers for a lesson"
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
return message.respond("There's already a lesson running!") if ika.current_lesson_running?
|
||||||
|
|
||||||
|
message.respond("Starting a lesson now!")
|
||||||
|
ika.start_lesson! message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
18
lib/commands/stop_lesson_command.rb
Normal file
18
lib/commands/stop_lesson_command.rb
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module Commands
|
||||||
|
class StopLessonCommand < Command
|
||||||
|
def self.command_string
|
||||||
|
"stoplesson"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.description
|
||||||
|
"Stops the current lesson, if one is running"
|
||||||
|
end
|
||||||
|
|
||||||
|
def execute
|
||||||
|
return message.respond("There's no lesson running") unless ika.current_lesson_running?
|
||||||
|
|
||||||
|
message.respond("Ending the current lesson!")
|
||||||
|
ika.stop_current_lesson!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,19 +0,0 @@
|
|||||||
require_relative './ika'
|
|
||||||
|
|
||||||
class ConsoleHandler < Ika
|
|
||||||
def start!
|
|
||||||
@handling_messages = true
|
|
||||||
|
|
||||||
while @handling_messages
|
|
||||||
handle_message Message::Console.new(responder(nil), gets.chomp)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def stop!
|
|
||||||
@handling_messages = false
|
|
||||||
end
|
|
||||||
|
|
||||||
def responder(_)
|
|
||||||
lambda { |response| puts "<Ika> #{response}" }
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,28 +0,0 @@
|
|||||||
require_relative './ika'
|
|
||||||
|
|
||||||
class DiscordHandler < Ika
|
|
||||||
attr_reader :bot
|
|
||||||
|
|
||||||
def initialize(bot:)
|
|
||||||
super()
|
|
||||||
@bot = bot
|
|
||||||
end
|
|
||||||
|
|
||||||
def start!
|
|
||||||
bot.remove_handler @message_handler if @message_handler
|
|
||||||
|
|
||||||
@message_handler = bot.message do |message_event|
|
|
||||||
handle_message Message::Discord.new(responder(message_event.channel), message_event.message)
|
|
||||||
end
|
|
||||||
|
|
||||||
bot.run # you can run this in the background, idk
|
|
||||||
end
|
|
||||||
|
|
||||||
def stop!
|
|
||||||
bot.remove_handler @message_handler if @message_handler
|
|
||||||
end
|
|
||||||
|
|
||||||
def responder(channel)
|
|
||||||
lambda { |response| channel.send_message(response) }
|
|
||||||
end
|
|
||||||
end
|
|
48
lib/drill.rb
48
lib/drill.rb
@ -1,48 +0,0 @@
|
|||||||
class Drill
|
|
||||||
COMMANDS = %w[
|
|
||||||
init
|
|
||||||
start
|
|
||||||
end
|
|
||||||
]
|
|
||||||
|
|
||||||
attr_reader :channel
|
|
||||||
|
|
||||||
def initialize(channel)
|
|
||||||
@channel = channel
|
|
||||||
@exists = false
|
|
||||||
@started = false
|
|
||||||
end
|
|
||||||
|
|
||||||
def init!
|
|
||||||
@exists = true
|
|
||||||
end
|
|
||||||
|
|
||||||
def start!
|
|
||||||
@started = true
|
|
||||||
end
|
|
||||||
|
|
||||||
def end!
|
|
||||||
@started = false
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_message(message)
|
|
||||||
message.command_message ? handle_command(message) : handle_normal_message(message)
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_command(message)
|
|
||||||
command = message.command
|
|
||||||
if COMMANDS.includes?(command)
|
|
||||||
send("handle_#{command}", message)
|
|
||||||
else
|
|
||||||
puts "[Drill] Unknown command #{command}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def started?
|
|
||||||
@started
|
|
||||||
end
|
|
||||||
|
|
||||||
def exists?
|
|
||||||
@exists
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,72 +0,0 @@
|
|||||||
require_relative "drill"
|
|
||||||
|
|
||||||
class DrillPlugin
|
|
||||||
COMMANDS = %w[
|
|
||||||
help
|
|
||||||
]
|
|
||||||
|
|
||||||
attr_reader :bot, :drills
|
|
||||||
|
|
||||||
def initialize(bot)
|
|
||||||
@bot = bot
|
|
||||||
@drills = Hash.new { Drill.new }
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_message(message)
|
|
||||||
puts "[#{self.class.name}] Handling \"#{message.content}\" from #{message.author.display_name}"
|
|
||||||
command = strip_prefix(message.content).split.first
|
|
||||||
p command
|
|
||||||
if command.nil? || command == "" || command == "help" || command == "!drill"
|
|
||||||
handle_help message
|
|
||||||
elsif COMMANDS.include? command
|
|
||||||
drill = drills[message.channel.id]
|
|
||||||
send("handle_#{command}", message, drill)
|
|
||||||
else
|
|
||||||
drill = drills[message.channel.id]
|
|
||||||
drill.handle_message(message)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_init(message, drill)
|
|
||||||
if drill.exists?
|
|
||||||
message.respond "You've already got a drill running in this channel"
|
|
||||||
else
|
|
||||||
drills[message.channel.id] = Drill.new message.channel
|
|
||||||
message.respond "New drill created!"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_start(message, drill)
|
|
||||||
if drill.started?
|
|
||||||
message.respond "This drill has already started!"
|
|
||||||
elsif drill.exists?
|
|
||||||
drill.start!
|
|
||||||
message.respond "Drill started!"
|
|
||||||
else
|
|
||||||
message.respond "You have to `!drill init` before you can start the drill"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_end(message, drill)
|
|
||||||
if !drill.exists?
|
|
||||||
message.respond "There's no drill to end"
|
|
||||||
elsif drill.started?
|
|
||||||
drills.delete message.channel.id
|
|
||||||
message.respond "Ending the drill now!"
|
|
||||||
else
|
|
||||||
message.respond "You have to `!drill start` before you can end the drill"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_help(message)
|
|
||||||
message.respond "Insert help message here"
|
|
||||||
end
|
|
||||||
|
|
||||||
def strip_prefix(content)
|
|
||||||
if content.start_with? "!drill"
|
|
||||||
content.sub("!drill ", "")
|
|
||||||
else
|
|
||||||
content
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
55
lib/ika.rb
55
lib/ika.rb
@ -1,26 +1,51 @@
|
|||||||
require_relative './session'
|
require_relative './session'
|
||||||
require_relative './message'
|
require_relative './lesson'
|
||||||
require_relative './drill_plugin'
|
require_relative './commands'
|
||||||
require_relative './ika/plugin'
|
|
||||||
|
|
||||||
class Ika
|
class Ika
|
||||||
attr_reader :plugins
|
attr_reader :bot
|
||||||
|
attr_reader :lessons, :sessions
|
||||||
|
attr_accessor :current_lesson, :current_session
|
||||||
|
|
||||||
PLUGIN_TYPES = [
|
def initialize(bot)
|
||||||
Plugin::HelpPlugin,
|
@bot = bot
|
||||||
Plugin::LessonPlugin
|
@lessons = {}
|
||||||
]
|
@sessions = {}
|
||||||
|
@current_session = nil
|
||||||
def self.for(type:, **kwargs)
|
@current_lesson = Lesson.new
|
||||||
type.new **kwargs
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize
|
def start!
|
||||||
@current_session = nil
|
bot.remove_handler @message_handler if @message_handler
|
||||||
@plugins = PLUGIN_TYPES.map { |plugin_type| plugin_type.new self }
|
|
||||||
|
@message_handler = bot.message do |message|
|
||||||
|
handle_message message
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.run # you can run this in the background, idk
|
||||||
|
end
|
||||||
|
|
||||||
|
def stop!
|
||||||
|
bot.remove_handler @message_handler if @message_handler
|
||||||
|
end
|
||||||
|
|
||||||
|
def current_lesson_running?
|
||||||
|
current_lesson.running?
|
||||||
|
end
|
||||||
|
|
||||||
|
def start_lesson!(message)
|
||||||
|
current_lesson.start!(message.channel)
|
||||||
|
end
|
||||||
|
|
||||||
|
def stop_current_lesson!
|
||||||
|
current_lesson.stop!
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_message(message)
|
def handle_message(message)
|
||||||
plugins.find { |plugin| plugin.handle_message message }
|
if command = Commands::Command.for(self, message)
|
||||||
|
command.execute
|
||||||
|
end
|
||||||
|
|
||||||
|
return current_session&.respond_to message
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
require_relative "./plugin/help_plugin"
|
|
||||||
require_relative "./plugin/lesson_plugin"
|
|
||||||
|
|
||||||
class Plugin
|
|
||||||
attr_reader :ika
|
|
||||||
|
|
||||||
def initialize(ika)
|
|
||||||
@ika = ika
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_message(message)
|
|
||||||
can_handle_message? message
|
|
||||||
end
|
|
||||||
|
|
||||||
def can_handle_message?(_)
|
|
||||||
false
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,14 +0,0 @@
|
|||||||
class Plugin
|
|
||||||
class HelpPlugin < Plugin
|
|
||||||
def handle_message(message)
|
|
||||||
return false unless super
|
|
||||||
|
|
||||||
message.respond "I'm beyond help"
|
|
||||||
end
|
|
||||||
|
|
||||||
def can_handle_message?(message)
|
|
||||||
message.content == "!help"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -1,80 +0,0 @@
|
|||||||
require_relative "../../lesson"
|
|
||||||
|
|
||||||
class Plugin
|
|
||||||
class LessonPlugin < Plugin
|
|
||||||
attr_reader :lessons
|
|
||||||
|
|
||||||
def initialize(ika)
|
|
||||||
super
|
|
||||||
@lessons = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_message(message)
|
|
||||||
super
|
|
||||||
Message.new(self, message).handle
|
|
||||||
end
|
|
||||||
|
|
||||||
def can_handle_message?(message)
|
|
||||||
return true if message.content == "!lesson"
|
|
||||||
return true if message.content == "!stoplesson"
|
|
||||||
|
|
||||||
return false unless lessons[message.channel.id]
|
|
||||||
|
|
||||||
true
|
|
||||||
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
|
|
||||||
return handle_lesson if content == "!lesson"
|
|
||||||
return handle_stoplesson if content == "!stoplesson"
|
|
||||||
|
|
||||||
lesson.handle_message(message)
|
|
||||||
end
|
|
||||||
|
|
||||||
def lesson
|
|
||||||
lsn = plugin.lessons[message.channel.id]
|
|
||||||
return lsn if lsn
|
|
||||||
|
|
||||||
lsn = Lesson.new responder: responder
|
|
||||||
plugin.lessons[message.channel.id] = lsn
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_lesson
|
|
||||||
if lesson.running?
|
|
||||||
respond "There's already a lesson running!"
|
|
||||||
else
|
|
||||||
respond "Starting a lesson now!"
|
|
||||||
lesson.start!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_stoplesson
|
|
||||||
if lesson.running?
|
|
||||||
respond "Ending the current lesson"
|
|
||||||
lesson.stop!
|
|
||||||
else
|
|
||||||
respond "There's no lesson running"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -8,33 +8,30 @@ DEFAULT_LESSON_PLAN = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
class Lesson
|
class Lesson
|
||||||
attr_reader :lesson_plan, :channel, :running, :scheduler
|
attr_reader :lesson_plan, :channel, :thread, :running, :scheduler
|
||||||
attr_accessor :responder
|
|
||||||
|
|
||||||
def initialize(lesson_plan=DEFAULT_LESSON_PLAN, scheduler: Rufus::Scheduler.new, responder: nil)
|
def initialize(lesson_plan=DEFAULT_LESSON_PLAN, scheduler: Rufus::Scheduler.new)
|
||||||
@lesson_plan = lesson_plan
|
@lesson_plan = lesson_plan
|
||||||
@running = false
|
@running = false
|
||||||
@scheduler = scheduler
|
@scheduler = scheduler
|
||||||
@responder = responder
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def stop!
|
def stop!
|
||||||
@scheduler.shutdown
|
@scheduler.shutdown
|
||||||
@running = false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def start!
|
def start!(channel)
|
||||||
lesson_plan.each_with_index do |(time, message), index|
|
lesson_plan.each_with_index do |(time, message), index|
|
||||||
offset = lesson_plan.map(&:first)[0..index - 1].sum(0)
|
offset = lesson_plan.map(&:first)[0..index - 1].sum(0)
|
||||||
offset = 0 if index == 0
|
offset = 0 if index == 0
|
||||||
scheduler.in "#{offset}m" do
|
scheduler.in "#{offset}m" do
|
||||||
responder.call "#{time} minutes to #{message}"
|
channel.send_message "#{time} minutes to #{message}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end_offset = lesson_plan.map(&:first).sum(0)
|
end_offset = lesson_plan.map(&:first).sum(0)
|
||||||
scheduler.in "#{end_offset}m" do
|
scheduler.in "#{end_offset}m" do
|
||||||
responder.call "Lesson over!"
|
channel.send_message "Lesson over!"
|
||||||
@running = false
|
@running = false
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -44,8 +41,4 @@ class Lesson
|
|||||||
def running?
|
def running?
|
||||||
running
|
running
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_message(_)
|
|
||||||
# TODO: make it possible to advance the lesson or whatever
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
109
lib/message.rb
109
lib/message.rb
@ -1,109 +0,0 @@
|
|||||||
class Message
|
|
||||||
attr_reader :responder
|
|
||||||
|
|
||||||
def initialize(responder)
|
|
||||||
@responder = responder
|
|
||||||
end
|
|
||||||
|
|
||||||
def content
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.content
|
|
||||||
end
|
|
||||||
|
|
||||||
def author
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.author
|
|
||||||
end
|
|
||||||
|
|
||||||
def channel
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.channel
|
|
||||||
end
|
|
||||||
|
|
||||||
def respond(response)
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.respond response
|
|
||||||
end
|
|
||||||
|
|
||||||
def message
|
|
||||||
discord_message
|
|
||||||
end
|
|
||||||
|
|
||||||
def words
|
|
||||||
content.split(" ")
|
|
||||||
end
|
|
||||||
|
|
||||||
def first_word
|
|
||||||
words.first
|
|
||||||
end
|
|
||||||
|
|
||||||
def command_message?
|
|
||||||
first_word.start_with? "!"
|
|
||||||
end
|
|
||||||
|
|
||||||
def command
|
|
||||||
command_message? ? first_word[1..] : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def subcommand
|
|
||||||
command_message? ? words[1] : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def params
|
|
||||||
command_message? ? words[2..] : []
|
|
||||||
end
|
|
||||||
|
|
||||||
class Console < Message
|
|
||||||
attr_reader :content
|
|
||||||
|
|
||||||
def initialize(responder, content)
|
|
||||||
super(responder)
|
|
||||||
@content = content
|
|
||||||
end
|
|
||||||
|
|
||||||
def author
|
|
||||||
OpenStruct.new(display_name: "CHANGE ME")
|
|
||||||
end
|
|
||||||
|
|
||||||
def channel
|
|
||||||
OpenStruct.new(id: nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
def respond(response)
|
|
||||||
responder.call response
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class Discord < Message
|
|
||||||
attr_reader :discord_message
|
|
||||||
|
|
||||||
def initialize(responder, discord_message)
|
|
||||||
super(responder)
|
|
||||||
@discord_message = discord_message
|
|
||||||
end
|
|
||||||
|
|
||||||
def content
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.content
|
|
||||||
end
|
|
||||||
|
|
||||||
def author
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.author
|
|
||||||
end
|
|
||||||
|
|
||||||
def channel
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.channel
|
|
||||||
end
|
|
||||||
|
|
||||||
def respond(response)
|
|
||||||
# TODO: figure out how to delegate
|
|
||||||
discord_message.respond response
|
|
||||||
end
|
|
||||||
|
|
||||||
def message
|
|
||||||
discord_message
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,15 +0,0 @@
|
|||||||
require_relative "../lib/discord_handler"
|
|
||||||
require "minitest/autorun"
|
|
||||||
|
|
||||||
class TestDiscordHandler < Minitest::Test
|
|
||||||
def setup
|
|
||||||
@bot = Minitest::Mock.new
|
|
||||||
@ika = DiscordHandler.new bot: @bot
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_start!
|
|
||||||
@bot.expect(:message, nil)
|
|
||||||
@bot.expect(:run, nil)
|
|
||||||
@ika.start!
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,21 +1,16 @@
|
|||||||
require_relative "../lib/ika"
|
require_relative "../lib/ika"
|
||||||
require "minitest/autorun"
|
require "minitest/autorun"
|
||||||
|
|
||||||
class TestHandler < Ika
|
|
||||||
attr_reader :responses
|
|
||||||
|
|
||||||
def initialize
|
|
||||||
@responses = []
|
|
||||||
end
|
|
||||||
|
|
||||||
def responder
|
|
||||||
lambda { |response| @responses << response }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class TestIka < Minitest::Test
|
class TestIka < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
@ika = TestHandler.new
|
@bot = Minitest::Mock.new
|
||||||
|
@ika = Ika.new @bot
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_start
|
||||||
|
@bot.expect(:message, nil)
|
||||||
|
@bot.expect(:run, nil)
|
||||||
|
@ika.start!
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_handle_command_message
|
def test_handle_command_message
|
||||||
@ -24,7 +19,6 @@ class TestIka < Minitest::Test
|
|||||||
Commands::Command.stub(:for, @command) do |x|
|
Commands::Command.stub(:for, @command) do |x|
|
||||||
@ika.handle_message("msg")
|
@ika.handle_message("msg")
|
||||||
end
|
end
|
||||||
assert_equal [], @ika.responses
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_handle_normal_message
|
def test_handle_normal_message
|
||||||
@ -36,6 +30,5 @@ class TestIka < Minitest::Test
|
|||||||
@ika.handle_message("msg")
|
@ika.handle_message("msg")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
assert_equal [], @ika.responses
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -4,12 +4,10 @@ require "minitest/autorun"
|
|||||||
class TestLesson < Minitest::Test
|
class TestLesson < Minitest::Test
|
||||||
def setup
|
def setup
|
||||||
@scheduler = Minitest::Mock.new
|
@scheduler = Minitest::Mock.new
|
||||||
@responses = []
|
|
||||||
@responder = lambda { |rsp| @responses << rsp }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_start
|
def test_start
|
||||||
@lesson = Lesson.new [[1, "test the thing"], [3, "finish testing"]], scheduler: @scheduler, responder: @responder
|
@lesson = Lesson.new [[1, "test the thing"], [3, "finish testing"]], scheduler: @scheduler
|
||||||
@scheduler.expect(:in, nil) { |time| time == "0m" }
|
@scheduler.expect(:in, nil) { |time| time == "0m" }
|
||||||
@scheduler.expect(:in, nil) { |time| time == "1m" }
|
@scheduler.expect(:in, nil) { |time| time == "1m" }
|
||||||
@scheduler.expect(:in, nil) { |time| time == "4m" }
|
@scheduler.expect(:in, nil) { |time| time == "4m" }
|
||||||
|
Loading…
Reference in New Issue
Block a user