def execute(m, args = nil)
unless m.channel
m.reply "Use !timeline in a channel"
return
end
network = bot.config.server
channel = m.channel.name
user = m.user.nick
parsed = TimelineGame.parse_command(args.to_s)
game = AsyncDuelHandler.load(TimelineGame::PLUGIN, network, channel, RabbotDb)
if parsed[:error]
flood_safe_reply(m, parsed[:error])
return
end
unless parsed[:action] == :call
handled = AsyncDuelHandler.handle(
game_mod: TimelineGame,
plugin: TimelineGame::PLUGIN,
network: network,
channel: channel,
game: game,
parsed: parsed,
user: user,
channel_users: m.channel.users.keys
)
unless handled[:passthrough]
flood_safe_reply(m, handled[:message] || handled[:error])
AsyncDuelHandler.clear(TimelineGame::PLUGIN, network, channel, RabbotDb) if handled[:cleared]
return
end
end
result = case parsed[:action]
when :call
TimelineGame.submit_call(game: game, user: user, choice: parsed[:choice])
else
{ message: TimelineGame.usage_message }
end
if result[:error]
flood_safe_reply(m, result[:error])
return
end
if result[:game]
if result[:done]
AsyncDuelHandler.clear(TimelineGame::PLUGIN, network, channel, RabbotDb)
else
AsyncDuelHandler.save(TimelineGame::PLUGIN, network, channel, result[:game], RabbotDb)
end
end
flood_safe_reply(m, result[:message])
end