local discordia = require('discordia') local client = discordia.Client() local http = require("simple-http") local json = require('json') local prefix = "." math.randomseed(os.time()) --- https://stackoverflow.com/a/22843701 string.startswith = function(self, str) return self:find('^' .. str) ~= nil end function load(filename) local f = io.open(filename, "r") if not f then return false end local token = f:read("*a") f:close() return token:gsub("\n","") end function write(filename, inp) local f = io.open(filename, "w") if not f then return false end local token = f:write(inp) f:close() return true end function getnick(str, guild) if guild ~= nil then local b = str:gsub("<@",""):gsub(">","") local user = guild:getMember(b) if user.nickname == nil then return user.name else return user.nickname end else local b = str:gsub("<@",""):gsub(">","") local user = client:getUser(b) return user.name end end client:on('ready', function() print('Logged in as '.. client.user.username) end) client:on('messageCreate', function(message) if message.content == prefix .. 'ping' then message.channel:send({embed = {title = "Ping?",description = "Pong!",color = 0x00FFFF}}) end if message.content:startswith(prefix .. 'hug <@') then local action = "hug" local actioner = " hugged " local body, res = http.request("GET", "https://nekos.life/api/v2/img/" .. action) message.channel:send({embed = {title = "Aww! " .. getnick(message.author.id, message.guild) .. actioner .. getnick(message.content:gsub(prefix .. action .. ' ', ''), message.guild) .. "!",color = 0x00FFFF, image = {url = body.url, height = 0, width = 0}}}) end if message.content:startswith(prefix .. 'cuddle <@') then local action = "cuddle" local actioner = " cuddled " local body, res = http.request("GET", "https://nekos.life/api/v2/img/" .. action) message.channel:send({embed = {title = "Aww! " .. getnick(message.author.id, message.guild) .. actioner .. getnick(message.content:gsub(prefix .. action .. ' ', ''), message.guild) .. "!",color = 0x00FFFF, image = {url = body.url, height = 0, width = 0}}}) end if message.content:startswith(prefix .. 'kiss <@') then local action = "kiss" local actioner = " kissed " local body, res = http.request("GET", "https://nekos.life/api/v2/img/" .. action) message.channel:send({embed = {title = "Aww! " .. getnick(message.author.id, message.guild) .. actioner .. getnick(message.content:gsub(prefix .. action .. ' ', ''), message.guild) .. "!",color = 0x00FFFF, image = {url = body.url, height = 0, width = 0}}}) end if message.content:startswith(prefix .. 'slap <@') then local action = "slap" local actioner = " slapped " local body, res = http.request("GET", "https://nekos.life/api/v2/img/" .. action) message.channel:send({embed = {title = "Woah! " .. getnick(message.author.id, message.guild) .. actioner .. getnick(message.content:gsub(prefix .. action .. ' ', ''), message.guild) .. "!",color = 0x00FFFF, image = {url = body.url, height = 0, width = 0}}}) end if message.content:startswith(prefix .. 'pat <@') then local action = "pat" local actioner = " patted " local body, res = http.request("GET", "https://nekos.life/api/v2/img/" .. action) message.channel:send({embed = {title = "Aww! " .. getnick(message.author.id, message.guild) .. actioner .. getnick(message.content:gsub(prefix .. action .. ' ', ''), message.guild) .. "!",color = 0x00FFFF, image = {url = body.url, height = 0, width = 0}}}) end if message.content:startswith(prefix .. '8ball') then local array = {"As I see it, yes.", "Ask again later.", "Better not tell you now.", "Cannot predict now.", "Concentrate and ask again.","Don’t count on it.", "It is certain.", "It is decidedly so.", "Most likely.", "My reply is no.", "My sources say no.","Outlook not so good.", "Outlook good.", "Reply hazy, try again.", "Signs point to yes.", "Very doubtful.", "Without a doubt.","Yes.", "Yes – definitely.", "You may rely on it."} local r = math.random(1,20) if message.content:gsub(prefix..'8ball','') == "" or message.content:gsub(prefix..'8ball','') == " " then message.channel:send("The 8-ball requires a question!") else message.channel:send("**" .. getnick(message.author.id,message.guild).. "** has asked the magic 8-ball: **"..message.content:gsub(prefix..'8ball ','').."**\n\nThe magic 8-ball replies: **"..array[r].."**") end end if message.content == prefix .. 'hug' then message.channel:send("You gotta hug someone!") end if message.content == prefix .. 'cuddle' then message.channel:send("You gotta cuddle someone!") end if message.content == prefix .. 'slap' then message.channel:send("You gotta slap someone!") end if message.content == prefix .. 'kiss' then message.channel:send("You gotta kiss someone!") end if message.content == prefix .. 'pat' then message.channel:send("You gotta pat someone!") end if message.content == prefix .. 'help' then message.channel:send("**Need help? Refer to my handy dandy help sheet!**\n\n```diff\n+ Action\nhug kiss pat cuddle slap\n\n+ Fun\n8ball counter\n\n+ Info\nping help source\n```") end if message.content:lower() == "welon sus" then local welonsus = load("data/welon.txt") welonsus = tonumber(welonsus) message:addReaction("🗿") welonsus = welonsus + 1 write("data/welon.txt", tostring(welonsus)) end if message.content == prefix .. 'source' then message.channel:send("**Look inside my brain at https://git.colean.cc/threeoh6000/joltik**") end if message.content == prefix .. 'counter' then local weloncounter = load("data/welon.txt") message.channel:send("**Times Welon has been sus:** ".. weloncounter) end if message.content == prefix .. 'shutdown' then if message.author.id == "867901290336223242" then message.channel:send("**Shutting down!** Good night mother! :heart:") client:stop() else message.channel:send("You aren't my mother!") end end end) client:run('Bot ' .. load("token.txt"))