def execute(m, args = nil)
unless m.channel
m.reply "Use !defduel in a channel"
return
end
network = bot.config.server
channel = m.channel.name
user = m.user.nick
parsed = DefduelGame.parse_command(args.to_s)
game = AsyncDuelHandler.load(DefduelGame::PLUGIN, network, channel, RabbotDb)
if parsed[:error]
flood_safe_reply(m, parsed[:error])
return
end
unless %i[define pick].include?(parsed[:action])
handled = AsyncDuelHandler.handle(
game_mod: DefduelGame,
plugin: DefduelGame::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(DefduelGame::PLUGIN, network, channel, RabbotDb) if handled[:cleared]
return
end
end
result = case parsed[:action]
when :define
DefduelGame.submit_definition(game: game, user: user, text: parsed[:text])
when :pick
DefduelGame.submit_pick(game: game, user: user, choice: parsed[:choice])
else
{ message: DefduelGame.usage_message }
end
if result[:error]
flood_safe_reply(m, result[:error])
return
end
if result[:game]
if result[:done]
AsyncDuelHandler.clear(DefduelGame::PLUGIN, network, channel, RabbotDb)
else
AsyncDuelHandler.save(DefduelGame::PLUGIN, network, channel, result[:game], RabbotDb)
end
end
flood_safe_reply(m, result[:message])
end