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.command_meta = {
|
||||
plugins = {},
|
||||
categories = {}
|
||||
}
|
||||
end
|
||||
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
|
||||
self.command_meta.plugins[command.parent.name] = {}
|
||||
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)
|
||||
return command
|
||||
end
|
||||
|
@ -56,6 +61,10 @@ function command_handler:remove_command(command)
|
|||
if #self.command_meta.plugins[command.parent.name] == 0 then
|
||||
self.command_meta.plugins[command.parent.name] = nil
|
||||
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
|
||||
return true
|
||||
else
|
||||
|
@ -81,7 +90,9 @@ function command_handler:get_commands_metadata()
|
|||
return table_utils.deepcopy(self.command_meta)
|
||||
end
|
||||
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 message.content:match(command.options.regex) then
|
||||
command:exec(message)
|
||||
|
|
|
@ -5,13 +5,15 @@ local table_utils = import("table-utils")
|
|||
local class = import("classes.baseclass")
|
||||
local command = class("Command")
|
||||
local acl = import("classes.command-acl")
|
||||
local discordia = import("discordia")
|
||||
function command:__init(name,callback)
|
||||
self.rules = acl()
|
||||
self.name = name
|
||||
self.timer = os.time()
|
||||
self.timer = discordia.Date():toMilliseconds()
|
||||
self.options = {
|
||||
allow_bots = false, --allow bots to execute the command
|
||||
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
|
||||
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
|
||||
|
@ -141,7 +143,7 @@ function command:exec(message,args,opts)
|
|||
if status then
|
||||
self.callback(message,args,opts)
|
||||
else
|
||||
msg:reply(err)
|
||||
message:reply(err)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -155,6 +157,7 @@ end
|
|||
function command:get_properties()
|
||||
return {
|
||||
name = self.name,
|
||||
category = self.options.category,
|
||||
args = table_utils.deepcopy(self.args),
|
||||
help = table_utils.deepcopy(self.help),
|
||||
prefix = self.prefix
|
||||
|
|
|
@ -42,8 +42,17 @@ function server_handler:__init(client,guild,options)
|
|||
self.default_plugins = options.default_plugins or {"test"}
|
||||
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.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
|
||||
os.execute("mkdir -p "..self.config_path)
|
||||
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