forked from tommy/tommy-bot
madae the skill thing lol
This commit is contained in:
92
src/modules/commands/skillCalc.lua
Normal file
92
src/modules/commands/skillCalc.lua
Normal file
@ -0,0 +1,92 @@
|
||||
local discordia=require('discordia')
|
||||
local API=require('./../strafes_net.lua')
|
||||
local commands=require('./../commands.lua')
|
||||
function sleep(n) local t = os.clock() while os.clock()-t <= n do end end
|
||||
discordia.extensions()
|
||||
commands:Add('skill',{},'calculate skill from placement', function(t)
|
||||
local args=t.args
|
||||
local message=t.message
|
||||
if #args<3 then return message:reply('invalid arguments') end
|
||||
local user=args[1]
|
||||
local game=API.GAMES[args[2]]
|
||||
local style=API.STYLES[args[3]]
|
||||
if not game then return message:reply('invalid game') end
|
||||
if not style then return message:reply('invalid style') end
|
||||
print('getting user')
|
||||
if user=='me' then
|
||||
local me=message.author
|
||||
local roblox_user=API:GetRobloxInfoFromDiscordId(me.id)
|
||||
if not roblox_user.id then return message:reply('```You are not registered with the RoverAPI```') end
|
||||
user=roblox_user
|
||||
elseif user:match('<@%d+>') then
|
||||
local user_id=user:match('<@(%d+)>')
|
||||
local member=message.guild:getMember(user_id)
|
||||
local roblox_user=API:GetRobloxInfoFromDiscordId(member.id)
|
||||
if not roblox_user.id then return message:reply('```You are not registered with the RoverAPI```') end
|
||||
user=roblox_user
|
||||
else
|
||||
local roblox_user=API:GetRobloxInfoFromUsername(user)
|
||||
if not roblox_user.id then return message:reply('```User not found```') end
|
||||
user=roblox_user
|
||||
end
|
||||
local sn_info = API:GetUser(user.id)
|
||||
if not sn_info.ID then return message:reply('```No data with StrafesNET is associated with that user.```') end
|
||||
print('user:',user.id)
|
||||
print('locked bot for this command')
|
||||
_G.locked = true
|
||||
print('getting times')
|
||||
local times = {}
|
||||
local res,rheaders = API:GetUserTimes(user.id,nil,style,game)
|
||||
if #res~=0 then
|
||||
local pages = tonumber(rheaders['Pagination-Count'])
|
||||
for _,v in next,res do
|
||||
table.insert(times,v)
|
||||
end
|
||||
if pages>1 then
|
||||
for i=2,pages do
|
||||
print('getting times page',i)
|
||||
res,rheaders = API:GetUserTimes(user.id,nil,style,game,i)
|
||||
for _,v in next,res do
|
||||
table.insert(times,v)
|
||||
end
|
||||
end
|
||||
end
|
||||
print('times:',#times)
|
||||
t.message:reply('ETA: '..(math.floor(#times*3/100))..' minutes '..((#times*3)%60)..' seconds (found '..#times..' times out of '..API.MAPS[game].count..' maps)')
|
||||
local i = 1
|
||||
for _,time in next,times do
|
||||
local rank = API:GetTimeRank(time.ID).Rank
|
||||
local count = API:GetMapCompletionCount(time.Map,style)
|
||||
time.Rank = rank
|
||||
time.MapCompletionCount = count
|
||||
time.Skill = API:FormatSkill(1-((rank-1)/tonumber(count)))
|
||||
time.SkillRaw = 1-((rank-1)/tonumber(count))
|
||||
i=i+1
|
||||
end
|
||||
table.sort(times,function(t1,t2)
|
||||
return t1.SkillRaw<t2.SkillRaw
|
||||
end)
|
||||
local msg = ''
|
||||
for _,time in next,times do
|
||||
-- msg = msg..'['..time.Rank..'/'..time.MapCompletionCount..'] '..time.Map..' ('..time.Skill..')\n'
|
||||
msg = msg..API.MAPS[game][time.Map].DisplayName..' ('..time.Map..'): '..time.Skill..' for '..time.Rank..'/'..time.MapCompletionCount..' with '..API:FormatTime(time.Time)..'\n'
|
||||
end
|
||||
local txt = './skill-'..API.GAMES[game]..'-'..API.STYLES[style]:lower()..'-'..user.name..'.txt'
|
||||
local file=io.open(txt,'w+')
|
||||
file:write(msg)
|
||||
file:close()
|
||||
print('h')
|
||||
message:reply({
|
||||
file=txt,
|
||||
reference={
|
||||
message=message,
|
||||
mention=true
|
||||
}
|
||||
})
|
||||
os.remove(txt)
|
||||
_G.locked = false
|
||||
else
|
||||
message:reply('```No times found for that user.```')
|
||||
_G.locked = false
|
||||
end
|
||||
end)
|
Reference in New Issue
Block a user