fixed commands crashing
This commit is contained in:
parent
299102fbc4
commit
1c50d56210
|
@ -0,0 +1,29 @@
|
||||||
|
2021-11-26 20:38:37 | [INFO] | Discordia 2.8.4
|
||||||
|
2021-11-26 20:38:37 | [INFO] | Connecting to Discord...
|
||||||
|
2021-11-26 20:38:38 | [INFO] | Authenticated as 512mb.org#1582
|
||||||
|
2021-11-26 20:38:38 | [INFO] | Launching shard 0 (1 out of 1)...
|
||||||
|
2021-11-26 20:38:39 | [INFO] | Shard 0 : Connected to wss://gateway.discord.gg
|
||||||
|
2021-11-26 20:38:39 | [INFO] | Shard 0 : Received HELLO
|
||||||
|
2021-11-26 20:38:39 | [INFO] | Shard 0 : Received READY
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Discordia 2.8.4
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Connecting to Discord...
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Authenticated as 512mb.org#1582
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Launching shard 0 (1 out of 1)...
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Shard 0 : Connected to wss://gateway.discord.gg
|
||||||
|
2021-11-26 20:42:01 | [INFO] | Shard 0 : Received HELLO
|
||||||
|
2021-11-26 20:42:02 | [INFO] | Shard 0 : Received READY
|
||||||
|
2021-11-26 20:43:30 | [INFO] | Discordia 2.8.4
|
||||||
|
2021-11-26 20:43:30 | [INFO] | Connecting to Discord...
|
||||||
|
2021-11-26 20:43:30 | [INFO] | Authenticated as 512mb.org#1582
|
||||||
|
2021-11-26 20:43:30 | [INFO] | Launching shard 0 (1 out of 1)...
|
||||||
|
2021-11-26 20:43:31 | [INFO] | Shard 0 : Connected to wss://gateway.discord.gg
|
||||||
|
2021-11-26 20:43:31 | [INFO] | Shard 0 : Received HELLO
|
||||||
|
2021-11-26 20:43:31 | [INFO] | Shard 0 : Received READY
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Discordia 2.8.4
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Connecting to Discord...
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Authenticated as 512mb.org#1582
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Launching shard 0 (1 out of 1)...
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Shard 0 : Connected to wss://gateway.discord.gg
|
||||||
|
2021-11-26 20:49:51 | [INFO] | Shard 0 : Received HELLO
|
||||||
|
2021-11-26 20:49:52 | [INFO] | Shard 0 : Received READY
|
||||||
|
2021-11-26 20:50:10 | [ERROR] | 400 - Bad Request : GET https://discord.com/api/v7/guilds/640251445949759499/members/nil
|
|
@ -0,0 +1 @@
|
||||||
|
{"url":"wss://gateway.discord.gg","913818433748086784":{"owner":{"discriminator":"7452","public_flags":0,"id":"245973168257368076","username":"Yessiest","avatar":"f8e9fa5b64a0333da12b9ece6d636db3","flags":0},"timestamp":1637944718,"shards":1}}
|
|
@ -0,0 +1,88 @@
|
||||||
|
--Generic ACL extended to work with discord-specific features
|
||||||
|
local acl = import("classes.acl")
|
||||||
|
local command_acl = acl:extend("CommandACL")
|
||||||
|
local table_utils = import("table-utils")
|
||||||
|
--The following method extends the ACL class to work with rule-specific features,
|
||||||
|
--such as the role position
|
||||||
|
function command_acl:check_group(roles)
|
||||||
|
local found = false
|
||||||
|
local highest_role = nil
|
||||||
|
local highest_role_status = nil
|
||||||
|
for k,v in pairs(roles) do
|
||||||
|
if self.group_rules[v.id] then
|
||||||
|
found = true
|
||||||
|
if not highest_role then
|
||||||
|
highest_role = v
|
||||||
|
highest_role_status = self.group_rules[v.id]
|
||||||
|
end
|
||||||
|
if v.position > highest_role.position then
|
||||||
|
highest_role = v
|
||||||
|
highest_role_status = self.group_rules[v.id]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local allow = highest_role_status
|
||||||
|
return found,(allow and allow == 1)
|
||||||
|
end
|
||||||
|
--The following methods extend the ACL class to add the "perm" permissions
|
||||||
|
--(the fallback when no rule/user permissions are found)
|
||||||
|
function command_acl:__init()
|
||||||
|
self.user_rules = {}
|
||||||
|
self.group_rules = {}
|
||||||
|
self.perm_rules = {}
|
||||||
|
end
|
||||||
|
function command_acl:check_perm(perms)
|
||||||
|
local output = true
|
||||||
|
for k,v in pairs(self.perm_rules) do
|
||||||
|
if not perms[v] then
|
||||||
|
output = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return output
|
||||||
|
end
|
||||||
|
function command_acl:set_perm_rules(list)
|
||||||
|
assert(type(list)=="table","table expected, got "..type(list))
|
||||||
|
self.perm_rules = list
|
||||||
|
end
|
||||||
|
function command_acl:export_all_lists()
|
||||||
|
local lists = {
|
||||||
|
users = "",
|
||||||
|
groups = "",
|
||||||
|
perm = ""
|
||||||
|
}
|
||||||
|
for k,v in pairs(self.user_rules) do
|
||||||
|
lists.users = lists.users..k..":"..tostring(v)..";\n"
|
||||||
|
end
|
||||||
|
for k,v in pairs(self.group_rules) do
|
||||||
|
lists.groups = lists.groups..k..":"..tostring(v)..";\n"
|
||||||
|
end
|
||||||
|
for k,v in pairs(self.perm_rules) do
|
||||||
|
lists.perm = lists.perm..k..":"..tostring(v)..";\n"
|
||||||
|
end
|
||||||
|
return lists
|
||||||
|
end
|
||||||
|
function command_acl:export_perm_list()
|
||||||
|
local list = ""
|
||||||
|
for k,v in pairs(self.perm_rules) do
|
||||||
|
list = list..k..":"..tostring(v)..";\n"
|
||||||
|
end
|
||||||
|
return list
|
||||||
|
end
|
||||||
|
function command_acl:export_snapshot()
|
||||||
|
return {
|
||||||
|
user_rules = table_utils.deepcopy(self.user_rules),
|
||||||
|
group_rules = table_utils.deepcopy(self.group_rules),
|
||||||
|
perm_rules = table_utils.deepcopy(self.perm_rules)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
function command_acl:import_snapshot(t)
|
||||||
|
self.user_rules = t.user_rules
|
||||||
|
self.group_rules = t.group_rules
|
||||||
|
self.perm_rules = t.perm_rules
|
||||||
|
end
|
||||||
|
function command_acl:import_perm_list()
|
||||||
|
list:gsub("(%w+):(%d+)",function(id,status)
|
||||||
|
self.perm_rules[id] = status
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
return command_acl
|
|
@ -14,6 +14,7 @@ function command_handler:__init(parent_server)
|
||||||
self.prefixes = {}
|
self.prefixes = {}
|
||||||
self.command_meta = {
|
self.command_meta = {
|
||||||
plugins = {},
|
plugins = {},
|
||||||
|
categories = {}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
function command_handler:add_prefix(prefix)
|
function command_handler:add_prefix(prefix)
|
||||||
|
@ -43,6 +44,10 @@ function command_handler:add_command(command)
|
||||||
if not self.command_meta.plugins[command.parent.name] then
|
if not self.command_meta.plugins[command.parent.name] then
|
||||||
self.command_meta.plugins[command.parent.name] = {}
|
self.command_meta.plugins[command.parent.name] = {}
|
||||||
end
|
end
|
||||||
|
if not self.command_meta.categories[command.options.category] then
|
||||||
|
self.command_meta.categories[command.options.category] = {}
|
||||||
|
end
|
||||||
|
table.insert(self.command_meta.categories[command.options.category],command.name)
|
||||||
table.insert(self.command_meta.plugins[command.parent.name],command.name)
|
table.insert(self.command_meta.plugins[command.parent.name],command.name)
|
||||||
return command
|
return command
|
||||||
end
|
end
|
||||||
|
@ -56,6 +61,10 @@ function command_handler:remove_command(command)
|
||||||
if #self.command_meta.plugins[command.parent.name] == 0 then
|
if #self.command_meta.plugins[command.parent.name] == 0 then
|
||||||
self.command_meta.plugins[command.parent.name] = nil
|
self.command_meta.plugins[command.parent.name] = nil
|
||||||
end
|
end
|
||||||
|
table_utils.remove_value(self.command_meta.categories[command.options.category],command.name)
|
||||||
|
if #self.command_meta.categories[command.options.category] == 0 then
|
||||||
|
self.command_meta.categories[command.options.category] = nil
|
||||||
|
end
|
||||||
self.command_pool[purified_name] = nil
|
self.command_pool[purified_name] = nil
|
||||||
return true
|
return true
|
||||||
else
|
else
|
||||||
|
@ -81,7 +90,9 @@ function command_handler:get_commands_metadata()
|
||||||
return table_utils.deepcopy(self.command_meta)
|
return table_utils.deepcopy(self.command_meta)
|
||||||
end
|
end
|
||||||
function command_handler:handle(message)
|
function command_handler:handle(message)
|
||||||
for name,command in pairs(self.command_pool) do
|
print("msg: "..tostring(message.content))
|
||||||
|
print("author: "..tostring(message.author.name))
|
||||||
|
for name,command in pairs(self.command_pool) do
|
||||||
if command.options.regex then
|
if command.options.regex then
|
||||||
if message.content:match(command.options.regex) then
|
if message.content:match(command.options.regex) then
|
||||||
command:exec(message)
|
command:exec(message)
|
||||||
|
|
|
@ -5,13 +5,15 @@ local table_utils = import("table-utils")
|
||||||
local class = import("classes.baseclass")
|
local class = import("classes.baseclass")
|
||||||
local command = class("Command")
|
local command = class("Command")
|
||||||
local acl = import("classes.command-acl")
|
local acl = import("classes.command-acl")
|
||||||
|
local discordia = import("discordia")
|
||||||
function command:__init(name,callback)
|
function command:__init(name,callback)
|
||||||
self.rules = acl()
|
self.rules = acl()
|
||||||
self.name = name
|
self.name = name
|
||||||
self.timer = os.time()
|
self.timer = discordia.Date():toMilliseconds()
|
||||||
self.options = {
|
self.options = {
|
||||||
allow_bots = false, --allow bots to execute the command
|
allow_bots = false, --allow bots to execute the command
|
||||||
typing_decorator = false, --set if the bot should be "typing" while the command executes
|
typing_decorator = false, --set if the bot should be "typing" while the command executes
|
||||||
|
category = "None", --set category for the command
|
||||||
prefix = true, --if true and if regex isn't enabled, check for prefix at the start. if not, don't check for prefix
|
prefix = true, --if true and if regex isn't enabled, check for prefix at the start. if not, don't check for prefix
|
||||||
regex = false, --check if the message matches this regular expression (should be a string)
|
regex = false, --check if the message matches this regular expression (should be a string)
|
||||||
no_parsing = false, --check if you want to disable the message argument parsing process
|
no_parsing = false, --check if you want to disable the message argument parsing process
|
||||||
|
@ -141,7 +143,7 @@ function command:exec(message,args,opts)
|
||||||
if status then
|
if status then
|
||||||
self.callback(message,args,opts)
|
self.callback(message,args,opts)
|
||||||
else
|
else
|
||||||
msg:reply(err)
|
message:reply(err)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -155,6 +157,7 @@ end
|
||||||
function command:get_properties()
|
function command:get_properties()
|
||||||
return {
|
return {
|
||||||
name = self.name,
|
name = self.name,
|
||||||
|
category = self.options.category,
|
||||||
args = table_utils.deepcopy(self.args),
|
args = table_utils.deepcopy(self.args),
|
||||||
help = table_utils.deepcopy(self.help),
|
help = table_utils.deepcopy(self.help),
|
||||||
prefix = self.prefix
|
prefix = self.prefix
|
||||||
|
|
|
@ -42,8 +42,17 @@ function server_handler:__init(client,guild,options)
|
||||||
self.default_plugins = options.default_plugins or {"test"}
|
self.default_plugins = options.default_plugins or {"test"}
|
||||||
self.default_prefixes = options.default_prefixes or {"<@!"..self.client.user.id..">","&"}
|
self.default_prefixes = options.default_prefixes or {"<@!"..self.client.user.id..">","&"}
|
||||||
|
|
||||||
self.config_path = self.config_path:gsub("%%id",self.id)
|
self.config_path = self.config_path:gsub("%id",self.id)
|
||||||
self:load_config()
|
self:load_config()
|
||||||
|
self.message_counter = 0
|
||||||
|
if autosave then
|
||||||
|
self.client:on("messageCreate",function(msg)
|
||||||
|
self.message_counter = self.message_counter + 1
|
||||||
|
if math.fmod(self.message_counter,self.autosave_frequency) == 0 then
|
||||||
|
self:save_config()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
if not file.existsDir(self.config_path) then
|
if not file.existsDir(self.config_path) then
|
||||||
os.execute("mkdir -p "..self.config_path)
|
os.execute("mkdir -p "..self.config_path)
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
return function(message,overrides)
|
||||||
|
assert(type(message) == "table","table expected, got "..type(message))
|
||||||
|
assert(type(overrides) == "table","table expected for arg#2, got "..type(overrides))
|
||||||
|
local fake = {content = message.content,
|
||||||
|
author = message.author,
|
||||||
|
member = message.guild:getMember(message.author.id),
|
||||||
|
channel = message.channel,
|
||||||
|
client = message.client,
|
||||||
|
guild = message.guild,
|
||||||
|
delete = function() message:delete() end,
|
||||||
|
reply = function(thing,...)
|
||||||
|
message.channel:send(...)
|
||||||
|
end,
|
||||||
|
createdAt = message.createdAt,
|
||||||
|
_parent = message.parent,
|
||||||
|
parent = message.parent,
|
||||||
|
id = message.id,
|
||||||
|
attachment = message.attachment,
|
||||||
|
attachments = message.attachments,
|
||||||
|
cleanContent = message.cleanContent,
|
||||||
|
editedTimestamp = message.editedTimestamp,
|
||||||
|
embed = message.embed,
|
||||||
|
embeds = message.embeds,
|
||||||
|
link = message.link,
|
||||||
|
mentionedChannels = message.mentionedChannels,
|
||||||
|
mentionedEmojis = message.mentionedEmojis,
|
||||||
|
mentionedRoles = message.mentionedRoles,
|
||||||
|
mentionedUsers = message.mentionedUsers,
|
||||||
|
nonce = message.nonce,
|
||||||
|
oldContent = message.oldContent,
|
||||||
|
pinned = message.pinned,
|
||||||
|
reactions = message.reactions,
|
||||||
|
tts = message.tts,
|
||||||
|
type = message.type,
|
||||||
|
webhookId = message.webhookId,
|
||||||
|
addReaction = function(...)
|
||||||
|
message:reactionAdd(...)
|
||||||
|
end,
|
||||||
|
removeReaction = function(...)
|
||||||
|
message:reactionRemove(...)
|
||||||
|
end,
|
||||||
|
emulated = true
|
||||||
|
}
|
||||||
|
for k,v in pairs(overrides) do
|
||||||
|
fake[k] = v
|
||||||
|
end
|
||||||
|
return fake
|
||||||
|
end
|
Loading…
Reference in New Issue