def execute(m, args = nil)
unless m.channel
m.reply "Use !archdig in a channel"
return
end
network = bot.config.server
channel = m.channel.name
user = m.user.nick
parsed = ArchdigGame.parse_command(args.to_s)
if parsed[:error]
flood_safe_reply(m, parsed[:error])
return
end
day = ArchdigGame.day_key
day_index = day.delete("-").to_i
data = ArchdigGame.load_day(network: network, channel: channel, day: day)
result = case parsed[:action]
when :topic, :help
data = ArchdigGame.ensure_topic(data, day_index: day_index % ArchdigTopics::TOPICS.length)
ArchdigGame.save_day(network: network, channel: channel, day: day, data: data)
{ message: ArchdigGame.topic_message(day_index: data["topic_index"]) }
when :submit
ArchdigGame.submit(data: data, user: user, text: parsed[:text], day_index: day_index)
when :top
{ message: ArchdigGame.format_top(ArchdigGame.ensure_topic(data, day_index: day_index % ArchdigTopics::TOPICS.length)) }
else
{ message: ArchdigGame.usage_message }
end
if result[:error]
flood_safe_reply(m, result[:error])
return
end
ArchdigGame.save_day(network: network, channel: channel, day: day, data: result[:data]) if result[:data]
flood_safe_reply(m, result[:message])
end