def execute(m, args = nil)
unless m.channel
m.reply "Use !rumor in a channel"
return
end
network = bot.config.server
channel = m.channel.name
user = m.user.nick
parsed = RumorGame.parse_command(args.to_s)
game = AsyncDuelHandler.load(RumorGame::PLUGIN, network, channel, RabbotDb)
if parsed[:error]
flood_safe_reply(m, parsed[:error])
return
end
unless %i[fact ask answer guess].include?(parsed[:action])
handled = AsyncDuelHandler.handle(
game_mod: RumorGame,
plugin: RumorGame::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(RumorGame::PLUGIN, network, channel, RabbotDb) if handled[:cleared]
return
end
end
result = case parsed[:action]
when :fact
RumorGame.submit_fact(game: game, user: user, text: parsed[:text])
when :ask
RumorGame.ask_question(game: game, user: user, question: parsed[:question])
when :answer
RumorGame.answer_question(game: game, user: user, answer: parsed[:answer])
when :guess
RumorGame.submit_guess(game: game, user: user, guess: parsed[:guess])
else
{ message: RumorGame.usage_message }
end
if result[:error]
flood_safe_reply(m, result[:error])
return
end
if result[:game]
if result[:done]
AsyncDuelHandler.clear(RumorGame::PLUGIN, network, channel, RabbotDb)
else
AsyncDuelHandler.save(RumorGame::PLUGIN, network, channel, result[:game], RabbotDb)
end
end
flood_safe_reply(m, result[:message])
end