pvpgn-server/lua/quiz/command.lua

134 lines
3.8 KiB
Lua

--[[
Copyright (C) 2014 HarpyWar (harpywar@gmail.com)
This file is a part of the PvPGN Project http://pvpgn.pro
Licensed under the same terms as Lua itself.
]]--
-- /quiz <start|stop|stats>
function command_quiz(account, text)
if not config.quiz then
return 1
end
local args = split_command(text, 2)
if (args[1] == "start") then
return q_command_start(account, args[2])
elseif (args[1] == "stop") then
return q_command_stop(account)
elseif (args[1] == "stats") then
if not args[2] then
return q_command_toplist(account)
else
return q_command_stats(account, args[2])
end
end
api.describe_command(account.name, args[0])
return -1
end
-- Start quiz in current channel
function q_command_start(account, filename)
if not account_is_operator_or_admin(account.name) then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "You must be at least a Channel Operator to use this command."))
return -1
end
local channel = api.channel_get_by_id(account.channel_id)
if not channel then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "This command can only be used inside a channel."))
return -1
end
if config.quiz_channel then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "Quiz has already ran in channel \"{}\". Use /quiz stop to force finish.", config.quiz_channel))
return -1
end
-- check if file exists
if not filename or not file_exists(q_directory() .. "/questions/" .. filename .. ".txt") then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "Available Quiz dictionaries: "))
api.message_send_text(account.name, message_type_error, account.name, " " .. config.quiz_filelist)
return -1
end
quiz:start(channel.name, filename)
return 0
end
-- Stop quiz
function q_command_stop(account)
if not account_is_operator_or_admin(account.name) then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "You must be at least a Channel Operator to use this command."))
return -1
end
if not config.quiz_channel then
api.message_send_text(account.name, message_type_error, account.name, localize(account.name, "Quiz is not running."))
return -1
end
quiz:stop(account.name)
return 0
end
-- Display Quiz Top players record
function q_command_toplist(account)
-- load records (if it was not loaded yet)
if not q_load_records() then
return -1
end
local output = localize(account.name, "Top {} Quiz records:", config.quiz_users_in_top)
api.message_send_text(account.name, message_type_info, account.name, output)
-- display TOP of total records
for i,t in pairs(q_records_total) do
if (i > config.quiz_users_in_top) then break end
local output = string.format(" %d. %s [%d %s]", i, t.username, t.points, localize(account.name, "points"))
api.message_send_text(account.name, message_type_info, account.name, output)
end
return 0
end
-- Display single player's record
function q_command_stats(account, username)
-- load records (if it was not loaded yet)
if not q_load_records() then
return -1
end
local found = false
-- find user in records
for i,t in pairs(q_records_total) do
if string.upper(t.username) == string.upper(username) then
api.message_send_text(account.name, message_type_info, account.name, localize(account.name, "{}'s Quiz record:", t.username))
local output = string.format(" %d. %s [%d %s]", i, t.username, t.points, localize(account.name, "points"))
api.message_send_text(account.name, message_type_info, account.name, output)
found = true
end
end
if not found then
api.message_send_text(account.name, message_type_info, account.name, localize(account.name, "{} has never played Quiz.", username))
end
return 0
end