Skip to content

Commit 8cb43f1

Browse files
authored
feat: Message Flags, fix: dmPermissions (#604)
2 parents dd62646 + 663fd90 commit 8cb43f1

File tree

8 files changed

+109
-50
lines changed

8 files changed

+109
-50
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/classes/AoiError.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ class AoiError {
8585
content: options?.toString()?.trim() === "" ? " " : options?.toString()
8686
};
8787
}
88+
8889
let msg;
8990
if (extraOptions.interaction) {
9091
if (options.content === "" && options.embeds?.length === 0 && options.files?.length === 0) return;
@@ -152,6 +153,7 @@ class AoiError {
152153
if (extraOptions.deleteCommand) {
153154
d.message.delete();
154155
}
156+
155157
return msg;
156158
}
157159

src/core/interpreter.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ const Interpreter = async (
105105
let embeds;
106106
let deleteIn;
107107
let suppressErrors;
108+
let flags;
108109
let editIn = undefined;
109110
let error;
110111
let attachments = [];
@@ -509,6 +510,9 @@ const Interpreter = async (
509510
if (FuncData?.allowedMentions) {
510511
allowedMentions = FuncData.allowedMentions;
511512
}
513+
if (FuncData?.flags) {
514+
flags = FuncData.flags;
515+
}
512516
if (FuncData?.embeds) {
513517
embeds = FuncData.embeds;
514518
}
@@ -584,6 +588,7 @@ const Interpreter = async (
584588
embeds: embeds,
585589
files: attachments,
586590
components: components,
591+
flags,
587592
allowedMentions: {
588593
parse: allowedMentions,
589594
repliedUser: reply?.user || false,

src/functions/interaction/clear.js

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,54 @@
11
module.exports = async (d) => {
2-
const data = d.util.aoiFunc(d);
3-
const { code } = d.command;
4-
if (data.err) return d.error(data.err);
2+
const data = d.util.aoiFunc(d);
3+
if (data.err) return d.error(data.err);
54

6-
let [channelID = d.channel.id, amount, filters = "everyone", returnCount = "false" ] = data.inside.splits;
5+
let [channelID = d.channel?.id, amount, filters, returnCount = "false"] = data.inside.splits;
76

8-
if (isNaN(amount) || amount < 1) return d.aoiError.fnError(d, "custom", { inside: data.inside }, "Amount" );
7+
if (isNaN(amount) || amount < 1) return d.aoiError.fnError(d, "custom", { inside: data.inside }, "Invalid Amount, must be a number and greater than 0");
98

10-
amount = Number(amount)
9+
amount = Number(amount);
1110

12-
if (amount > 100) amount = 100
11+
if (amount > 100) amount = 100;
1312

14-
const channel = await d.util.getChannel(d, channelID);
15-
if (!channel) return d.aoiError.fnError(d, "channel", { inside: data.inside });
13+
const channel = await d.util.getChannel(d, channelID);
14+
if (!channel) return d.aoiError.fnError(d, "channel", { inside: data.inside });
1615

17-
let messages = await channel.messages
18-
.fetch({ limit: amount, cache: true })
19-
.catch((err) => {
20-
d.aoiError.fnError(d, "custom", {}, "Failed To Fetch Messages With Reason: " + err);
16+
let messages = await channel.messages.fetch({ limit: amount, cache: true }).catch((err) => {
17+
d.aoiError.fnError(d, "custom", {}, "Failed To Fetch Messages With Reason: " + err);
2118
});
2219

23-
filters = filters.toLowerCase().split(",");
24-
25-
messages = [...messages.values()]
26-
.filter((x) => {
27-
if (filters.includes("")) return true;
28-
if (filters.includes("everyone")) return true;
29-
if (filters.includes("unpinned") && !x.pinned) return true;
30-
if (filters.includes("bots") && x.author?.bot) return true;
31-
if (
32-
filters.some(
33-
(filter) =>
34-
filter.startsWith("user:") && x.author?.id === filter.split(":")[1]
35-
)
36-
)
37-
return true;
38-
return false;
39-
})
40-
.slice(0, amount);
41-
42-
if (!messages.length) {
43-
messages = [...messages.values()].slice(0, amount);
44-
}
45-
46-
let result = await channel.bulkDelete(messages, true).catch((err) => {
47-
d.aoiError.fnError(d, "custom" ,{}, "Failed To Delete Message With Reason: " + err);
48-
});
49-
50-
result = returnCount === "true" ? messages.length : null;
51-
52-
return {
53-
code: d.util.setCode({ function: d.func, code, inside: data.inside, result }),
54-
};
20+
filters = filters
21+
.split("}")
22+
.map(function (x) {
23+
x = x.replace("{", "").trim();
24+
if (x.length === 0) return null;
25+
let [key, value] = x.split(":");
26+
return { [key]: value.split(",") };
27+
})
28+
.filter(Boolean);
29+
30+
messages = [...messages.values()]
31+
.filter((x) => {
32+
let passed = false;
33+
for (let filter of filters) {
34+
let key = Object.keys(filter)[0];
35+
let value = filter[key];
36+
if (key === "users" && value.includes(x.author?.id)) passed = true;
37+
if (key === "words" && value.some((word) => x.content.includes(word))) passed = true;
38+
if (key === "bots" && x.author?.bot === (value === "true")) passed = true;
39+
if (key === "unpinned" && x.pinned !== (value === "true")) passed = true;
40+
}
41+
return passed;
42+
})
43+
.slice(0, amount);
44+
45+
const result = await channel.bulkDelete(messages, true).catch((err) => {
46+
d.aoiError.fnError(d, "custom", {}, "Failed To Delete Message With Reason: " + err);
47+
});
48+
49+
data.result = returnCount === "true" ? result.size : null;
50+
51+
return {
52+
code: d.util.setCode(data)
53+
};
5554
};

src/functions/interaction/createApplicationCommand.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ module.exports = async (d) => {
66
const data = d.util.aoiFunc(d);
77
if (data.err) return d.error(data.err);
88

9-
let [guildID, name, description, defaultPermission = "true", dmPermissions = "true", type = "slash", ...opts] = data.inside.splits;
9+
let [guildID, name, description, defaultPermission = "true", dmPermission = "true", type = "slash", ...opts] = data.inside.splits;
1010
name = name.addBrackets();
1111
let options;
1212
let appData;
1313

14-
if (dmPermissions != "true" && dmPermissions != "false") return d.aoiError.fnError(d, "custom", {}, "dmPermissions expects to be boolean");
14+
if (dmPermission != "true" && dmPermission != "false") return d.aoiError.fnError(d, "custom", {}, "dmPermission expects to be boolean");
1515
if (defaultPermission != "true" && defaultPermission != "false") return d.aoiError.fnError(d, "custom", {}, "defaultPermission expects to be boolean");
1616

1717
const guild = guildID === "global" ? undefined : guildID === "custom" ? "custom" : await d.util.getGuild(d, guildID);
@@ -45,7 +45,7 @@ module.exports = async (d) => {
4545
type,
4646
description: description?.addBrackets(),
4747
defaultMemberPermission: defaultPermission === "true",
48-
dmPermissions: dmPermissions === "true",
48+
dmPermission: dmPermission === "true",
4949
options
5050
},
5151
guildID: guild?.id
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
const { MessageFlags } = require("discord.js");
2+
3+
module.exports = async (d) => {
4+
const data = d.util.aoiFunc(d);
5+
if (data.err) return d.error(data.err);
6+
7+
const [channelId, messageId, ...flags] = data.inside.splits;
8+
9+
const channel = await d.util.getChannel(d, channelId);
10+
if (!channel) return d.aoiError.fnError(d, "channel", { inside: data.inside });
11+
12+
const message = await d.util.getMessage(channel, messageId);
13+
if (!message) return d.aoiError.fnError(d, "message", { inside: data.inside });
14+
15+
message.edit({ flags: flags.map((x) => MessageFlags[x.trim()]) }).catch((err) => {
16+
return d.aoiError.fnError(d, "custom", {}, "Failed To Add Message Flags With Reason: " + err);
17+
});
18+
19+
return {
20+
code: d.util.setCode(data)
21+
};
22+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const { MessageFlags } = require("discord.js");
2+
3+
module.exports = async (d) => {
4+
const data = d.util.aoiFunc(d);
5+
if (data.err) return d.error(data.err);
6+
7+
const [...flags] = data.inside.splits;
8+
9+
return {
10+
code: d.util.setCode(data),
11+
flags: flags.map((x) => MessageFlags[x.trim()])
12+
};
13+
};

src/handler/parsers.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,7 @@ const errorHandler = async (errorMessage, d, returnMsg = false, channel) => {
371371
let reactions = [];
372372
const embeds = [];
373373
const components = [];
374+
const flags = [];
374375

375376
let reply = {
376377
message: undefined,
@@ -382,6 +383,10 @@ const errorHandler = async (errorMessage, d, returnMsg = false, channel) => {
382383
messages: []
383384
};
384385

386+
let allowedMentions = {
387+
parse: ["everyone", "users", "roles"]
388+
}
389+
385390
const parts = CreateObjectAST(errorMessage);
386391
for (const part of parts) {
387392
errorMessage = errorMessage.replace(part, "");
@@ -411,6 +416,17 @@ const errorHandler = async (errorMessage, d, returnMsg = false, channel) => {
411416
} else if (specialChecker(part, "ephemeral")) ephemeral = true;
412417
else if (Checker(part, "deleteIn")) deleteIn = part.split(":")[1].trim();
413418
else if (Checker(part, "reactions")) reactions = reactionParser(part.split(":").slice(1).join(":").replace("}", ""));
419+
else if (Checker(part, "allowedMentions")) {
420+
const parts = part.split(":")[1].split("}")[0].split(",");
421+
if (parts.includes("all")) allowedMentions.parse = ["everyone", "users", "roles"];
422+
else if (parts.includes("none")) allowedMentions.parse = [];
423+
else if (parts.includes("")) allowedMentions.parse = [];
424+
else allowedMentions.parse = [...parts];
425+
}
426+
else if (Checker(part, "flags")) {
427+
const parts = part.split(":")[1].split("}")[0].split(",");
428+
flags.push(parts.map(x => Discord.MessageFlags[x.trim()]));
429+
}
414430
}
415431

416432
if (!embeds.length) send = false;
@@ -423,6 +439,8 @@ const errorHandler = async (errorMessage, d, returnMsg = false, channel) => {
423439
components,
424440
content: errorMessage.addBrackets() === "" ? " " : errorMessage.addBrackets(),
425441
files,
442+
allowedMentions,
443+
flags,
426444
options: {
427445
reply,
428446
reactions: reactions.length ? reactions : undefined,
@@ -432,7 +450,7 @@ const errorHandler = async (errorMessage, d, returnMsg = false, channel) => {
432450
defer,
433451
edits: edits.edits,
434452
deleteIn,
435-
deleteCommand
453+
deleteCommand,
436454
}
437455
};
438456
}

0 commit comments

Comments
 (0)