512mb-bot/plugins/tools/init.lua

162 lines
4.2 KiB
Lua

local plugin_class = import("classes.plugin")
local command = import("classes.command")
local plugin = plugin_class()
local markov = require("markov")
local qalculator = require("libqalculator")
local markov_instance = markov.new()
math.randomseed(os.time()+os.clock())
local safe_clone = function(tab,disallow)
local new_tab = {}
for k,v in pairs(tab) do
if not disallow[k] then
new_tab[k] = v
end
end
return new_tab
end
function to_bit_string(num)
local t=""
local rest
while num>0 do
rest=math.fmod(num,2)
t=t..rest
num=(num-rest)/2
end
return t:reverse()
end
local flip = command("flip",{
category = "Miscellaneous",
help = "Flips a coin, obv.",
usage = "flip",
exec = function(msg,args,opts)
local coin = math.random(1,100)%2
if coin > 0 then
msg:reply("Heads")
else
msg:reply("Tails")
end
end,
})
plugin:add_command(flip)
local dice = command("dice",{
category = "Miscellaneous",
usage = "dice <2d6,d30,d20+4,etc>",
exec = function(msg,args,opts)
local out = {embed = {
fields = {},
footer = {
text = 0
}
}}
for I = 1,#args do
local v = args[I]
for J = 1,(v:match("(%d+)d%d+") or 1) do
local value = math.random(1,tonumber(v:match("d(%d+)")))
if v:find("d%d+[%+%-]%d+") then
if v:match("d%d+([%+%-])") == "+" then
value = value + tonumber(v:match("d%d+[%+%-](%d+)"))
else
value = value - tonumber(v:match("d%d+[%+%-](%d+)"))
end
end
out.embed.fields[#out.embed.fields+1] = {name = "d"..v:match("d(%d+)"),value = value, inline = true}
out.embed.footer.text = out.embed.footer.text+value
if #out.embed.fields >= 25 then
break
end
end
if #out.embed.fields >= 25 then
break
end
end
out.embed.footer.text = "Total: "..out.embed.footer.text
msg:reply(out)
end,
})
plugin:add_command(dice)
local cards = command("cards",{
category = "Miscellaneous",
usage = "cards <amount>",
args = {"number"},
exec = function(msg,args,opts)
local out = {embed = {
fields = {}
}}
local random = math.random
for I = 1,(args[1] < 25 and args[1]) or 25 do
local suits = {"spades","clubs","diamonds","hearts"}
local values = {
"A","1","2","3","4","5",
"6","7","8","9","J","Q","K"
}
out.embed.fields[I] = {name = "card", value = " :"..suits[random(1,4)]..":"..values[random(1,11)].." ",inline = true}
end
msg:reply(out)
end,
})
plugin:add_command(cards)
local calculate = command("calculate",{
category = "Miscellaneous",
args = {
"string"
},
exec = function(msg,args,opts)
msg:reply(qalculator.qalc(table.concat(args," "),opts["e"]))
end,
})
plugin:add_command(calculate)
local pfp = command("pfp",{
category = "Miscellaneous",
exec = function(msg,args,opts)
local user = client:getUser((args[1] or ""):match("%d+"))
if user then
msg:reply(user:getAvatarURL().."?size=2048")
else
msg:reply(msg.author:getAvatarURL().."?size=2048")
end
end,
})
plugin:add_command(pfp)
local markov = command("markov",{
category = "Miscellaneous",
exec = function(msg,args,opts)
local preset,code,err = import("file").readJSON("./resources/"..(opts["preset"] or "default"):match("%w+")..".json",{system_failed = true})
if preset.system_failed then
msg:reply("No such preset")
return
end
markov_instance:load_state(preset)
local output = markov_instance:run("The",100)
msg:reply(output)
end
})
plugin:add_command(markov)
local embed = command("embed",{
category = "Miscellaneous",
args = {
"string"
},
exec = function(msg,args,opts)
local embed = msg.content:match("{.+}")
if not embed then
msg:reply("Invalid embed object")
return
end
local embed_obj,code,err = import("json").decode(embed)
if not embed_obj then
msg:reply("Error while decoding JSON object: "..tostring(err))
return
end
if pcall(discordia.Color.fromHex,embed_obj.color) then
embed_obj.color = discordia.Color.fromHex(embed_obj.color).value
end
msg:reply({embed = embed_obj})
end
})
plugin:add_command(embed)
plugin:load_helpdb(plugin_path.."help.lua")
return plugin