144 lines
3.8 KiB
Lua
144 lines
3.8 KiB
Lua
local discordia = require('discordia')
|
||
local client = discordia.Client {
|
||
gatewayIntents = 36863,
|
||
}
|
||
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
|
||
|
||
function getinfo(guild)
|
||
if guild ~= nil then
|
||
local membercount = 0
|
||
local botcount = 0
|
||
for member in guild.members:iter() do
|
||
if member.user.bot then
|
||
botcount = botcount + 1
|
||
else
|
||
membercount = membercount + 1
|
||
end
|
||
end
|
||
return {membercount, botcount}
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
function getchannels(guild)
|
||
if guild ~= nil then
|
||
local members = load("data/"..guild.id..".m")
|
||
local bots = load("data/"..guild.id..".b")
|
||
if members == false then return false end
|
||
if bots == false then return false end
|
||
local mchannel = guild:getChannel(members)
|
||
local bchannel = guild:getChannel(bots)
|
||
print(mchannel)
|
||
print(bchannel)
|
||
if mchannel == nil then return false end
|
||
if bchannel == nil then return false end
|
||
|
||
return {mchannel, bchannel}
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
|
||
client:on('ready', function()
|
||
print('Logged in as '.. client.user.username)
|
||
end)
|
||
|
||
client:on('memberJoin', function(member)
|
||
local guildinfo = getinfo(member.guild)
|
||
local guildchns = getchannels(member.guild)
|
||
if guildchns ~= false and guildinfo ~= false then
|
||
guildchns[1]:setName("⭐|Members: "..guildinfo[1])
|
||
guildchns[2]:setName("🤖|Bots: "..guildinfo[2])
|
||
end
|
||
end)
|
||
|
||
client:on('memberLeave', function(member)
|
||
local guildinfo = getinfo(member.guild)
|
||
local guildchns = getchannels(member.guild)
|
||
if guildchns ~= false and guildinfo ~= false then
|
||
guildchns[1]:setName("⭐|Members: "..guildinfo[1])
|
||
guildchns[2]:setName("🤖|Bots: "..guildinfo[2])
|
||
end
|
||
end)
|
||
|
||
client:on('messageCreate', function(message)
|
||
if message.content == prefix .. 'ping' and message.author.id == client.owner.id then
|
||
message.channel:send({embed = {title = "Ping?",description = "Pong!",color = 0x00FFFF}})
|
||
end
|
||
if message.content == prefix .. 'shutdown' then
|
||
if message.author.id == "867901290336223242" then
|
||
message.channel:send("aight byte")
|
||
client:stop()
|
||
end
|
||
end
|
||
if message.content == prefix .. 'update' then
|
||
local guildinfo = getinfo(message.guild)
|
||
local guildchns = getchannels(message.guild)
|
||
if guildchns ~= false and guildinfo ~= false then
|
||
guildchns[1]:setName("⭐|Members: "..guildinfo[1])
|
||
guildchns[2]:setName("🤖|Bots: "..guildinfo[2])
|
||
else
|
||
message.channel:send("update unsuccessful")
|
||
end
|
||
end
|
||
if message.content:startswith(prefix .. "botchn") then
|
||
if message.author.id == "867901290336223242" or message.author.id == message.guild.owner.user.id then
|
||
local chn = message.content:gsub(prefix.."botchn ","")
|
||
write("data/"..message.guild.id..".b",chn)
|
||
message.channel:send("bot stat channel set")
|
||
end
|
||
end
|
||
if message.content:startswith(prefix .. "memchn") then
|
||
if message.author.id == "867901290336223242" or message.author.id == message.guild.owner.user.id then
|
||
local chn = message.content:gsub(prefix.."memchn ","")
|
||
write("data/"..message.guild.id..".m",chn)
|
||
message.channel:send("member stat channel set")
|
||
end
|
||
end
|
||
|
||
end)
|
||
|
||
client:run('Bot ' .. load("token.txt.noinclude"))
|
||
|