catto.js 0.3.5 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Bot.js +48 -45
- package/package.json +4 -4
- package/utils.js +12 -0
package/Bot.js
CHANGED
|
@@ -3,7 +3,8 @@ var events = require("events");
|
|
|
3
3
|
var Discord = require("discord.js");
|
|
4
4
|
var User = require("./User");
|
|
5
5
|
var MessageBuilder = require("./MessageBuilder");
|
|
6
|
-
|
|
6
|
+
var Base64 = require("./Base64");
|
|
7
|
+
if (typeof EventEmitter === "undefined") {
|
|
7
8
|
var { EventEmitter } = events;
|
|
8
9
|
}
|
|
9
10
|
module.exports = class extends EventEmitter {
|
|
@@ -14,7 +15,8 @@ module.exports = class extends EventEmitter {
|
|
|
14
15
|
"intents": 98045,
|
|
15
16
|
"apiv": 10,
|
|
16
17
|
"slashListener": !0,
|
|
17
|
-
"publicKey": ""
|
|
18
|
+
"publicKey": "",
|
|
19
|
+
"debug": !1
|
|
18
20
|
}, options || {});
|
|
19
21
|
if (client) {
|
|
20
22
|
this.client = client;
|
|
@@ -34,6 +36,9 @@ module.exports = class extends EventEmitter {
|
|
|
34
36
|
this.buttons = new Map();
|
|
35
37
|
this.commands = new Map();
|
|
36
38
|
this.slashCommands = new Map();
|
|
39
|
+
if (this.options.debug) {
|
|
40
|
+
this.client.on("debug", console.log);
|
|
41
|
+
}
|
|
37
42
|
this.client.on("ready", () => {
|
|
38
43
|
var cmds = [];
|
|
39
44
|
for (var cmd of this.slashCommands.values()) {
|
|
@@ -126,7 +131,7 @@ module.exports = class extends EventEmitter {
|
|
|
126
131
|
if (this.options.slashListener) {
|
|
127
132
|
this.client.application.commands.set(cmds);
|
|
128
133
|
}
|
|
129
|
-
this.emit("running");
|
|
134
|
+
this.emit("running", { Discord, MessageBuilder });
|
|
130
135
|
});
|
|
131
136
|
this.client.on("interactionCreate", this.handleInteractionCreate.bind(this));
|
|
132
137
|
this.client.on("messageCreate", message => {
|
|
@@ -154,6 +159,33 @@ module.exports = class extends EventEmitter {
|
|
|
154
159
|
}
|
|
155
160
|
this.emit("message", message);
|
|
156
161
|
});
|
|
162
|
+
this.deleteKey = "";
|
|
163
|
+
this.client.on("messageDelete", message => {
|
|
164
|
+
message.author = new User(message.author, this);
|
|
165
|
+
if (message.member) {
|
|
166
|
+
message.member.user = new User(message.member.user, this);
|
|
167
|
+
}
|
|
168
|
+
var deleteCache = JSON.parse(Base64.decode(this.deleteKey));
|
|
169
|
+
setTimeout(async() => {
|
|
170
|
+
var log = await message.guild.fetchAuditLogs({
|
|
171
|
+
"type": 72,
|
|
172
|
+
"limit": 50
|
|
173
|
+
});
|
|
174
|
+
var now = log.entries.filter(l => l.targetId == message.author.id).first();
|
|
175
|
+
if (deleteCache[message.author.id] && now.id == deleteCache[message.author.id].id) {
|
|
176
|
+
if (now.extra.count > deleteCache[message.author.id].extra.count) {
|
|
177
|
+
message.deletedBy = new User(now.executor, this);
|
|
178
|
+
} else {
|
|
179
|
+
message.deletedBy = message.author;
|
|
180
|
+
}
|
|
181
|
+
} else {
|
|
182
|
+
message.deletedBy = new User(now.executor, this);
|
|
183
|
+
}
|
|
184
|
+
deleteCache[message.author.id] = now;
|
|
185
|
+
this.deleteKey = Base64.encode(JSON.stringify(deleteCache));
|
|
186
|
+
this.emit("messageDeleted", message);
|
|
187
|
+
}, 1e3);
|
|
188
|
+
});
|
|
157
189
|
this.client.on("guildCreate", guild => {
|
|
158
190
|
this.emit("botAdd", guild);
|
|
159
191
|
});
|
|
@@ -161,6 +193,11 @@ module.exports = class extends EventEmitter {
|
|
|
161
193
|
this.emit("botDelete", guild);
|
|
162
194
|
});
|
|
163
195
|
}
|
|
196
|
+
get servers() {
|
|
197
|
+
var r = Array.from(this.client.guilds.values());
|
|
198
|
+
r.count = r.length;
|
|
199
|
+
return r;
|
|
200
|
+
}
|
|
164
201
|
slashCommand(basic, options, executor) {
|
|
165
202
|
if (!basic.name.startsWith("/")) {
|
|
166
203
|
throw new Error("Slash command starts with /.");
|
|
@@ -213,38 +250,7 @@ module.exports = class extends EventEmitter {
|
|
|
213
250
|
"type": 1
|
|
214
251
|
});
|
|
215
252
|
} else {
|
|
216
|
-
|
|
217
|
-
if (interaction.isCommand()) {
|
|
218
|
-
interaction = new Discord.CommandInteraction(this.client, req.body);
|
|
219
|
-
if (interaction.isChatInputCommand()) {
|
|
220
|
-
interaction = new Discord.ChatInputCommandInteraction(this.client, req.body);
|
|
221
|
-
}
|
|
222
|
-
} else if (interaction.isButton()) {
|
|
223
|
-
interaction = new Discord.ButtonInteraction(this.client, req.body);
|
|
224
|
-
}
|
|
225
|
-
interaction.reply = async options => {
|
|
226
|
-
if (this.deferred || this.replied) {
|
|
227
|
-
throw new Error("Already deferred or replied.");
|
|
228
|
-
}
|
|
229
|
-
if (options.ephemeral !== null && options.ephemeral !== undefined) {
|
|
230
|
-
this.ephemeral = options.ephemeral;
|
|
231
|
-
} else {
|
|
232
|
-
this.ephemeral = !1;
|
|
233
|
-
}
|
|
234
|
-
var messagePayload = null;
|
|
235
|
-
if (options instanceof Discord.MessagePayload) {
|
|
236
|
-
messagePayload = options;
|
|
237
|
-
} else {
|
|
238
|
-
messagePayload = Discord.MessagePayload.create(this, options);
|
|
239
|
-
}
|
|
240
|
-
var { body: data, files } = await messagePayload.resolveBody().resolveFiles();
|
|
241
|
-
res.json({
|
|
242
|
-
"type": 4,
|
|
243
|
-
data
|
|
244
|
-
});
|
|
245
|
-
this.replied = !0;
|
|
246
|
-
}
|
|
247
|
-
this.handleInteractionCreate(interaction);
|
|
253
|
+
this.client.actions.InteractionCreate.handle(req.body);
|
|
248
254
|
}
|
|
249
255
|
} else {
|
|
250
256
|
res.status(401).end("Invalid request signature.");
|
|
@@ -252,11 +258,11 @@ module.exports = class extends EventEmitter {
|
|
|
252
258
|
}
|
|
253
259
|
}
|
|
254
260
|
handleInteractionCreate(interaction) {
|
|
261
|
+
interaction.user = new User(interaction.user, this);
|
|
262
|
+
if (interaction.member) {
|
|
263
|
+
interaction.member.user = new User(interaction.member.user, this);
|
|
264
|
+
}
|
|
255
265
|
if (interaction.isChatInputCommand()) {
|
|
256
|
-
interaction.user = new User(interaction.user, this);
|
|
257
|
-
if (interaction.member) {
|
|
258
|
-
interaction.member.user = new User(interaction.member.user, this);
|
|
259
|
-
}
|
|
260
266
|
var command = this.slashCommands.get(interaction.commandName);
|
|
261
267
|
if (command) {
|
|
262
268
|
try {
|
|
@@ -274,12 +280,7 @@ module.exports = class extends EventEmitter {
|
|
|
274
280
|
} else {
|
|
275
281
|
interaction.reply({}).catch(() => {});
|
|
276
282
|
}
|
|
277
|
-
}
|
|
278
|
-
if (interaction.isButton()) {
|
|
279
|
-
interaction.user = new User(interaction.user, this);
|
|
280
|
-
if (interaction.member) {
|
|
281
|
-
interaction.member.user = new User(interaction.member.user, this);
|
|
282
|
-
}
|
|
283
|
+
} else if (interaction.isButton()) {
|
|
283
284
|
var button = this.buttons.get(interaction.customId);
|
|
284
285
|
if (button) {
|
|
285
286
|
try {
|
|
@@ -298,6 +299,8 @@ module.exports = class extends EventEmitter {
|
|
|
298
299
|
} else {
|
|
299
300
|
interaction.reply({}).catch(() => {});
|
|
300
301
|
}
|
|
302
|
+
} else {
|
|
303
|
+
this.emit("interaction", interaction);
|
|
301
304
|
}
|
|
302
305
|
}
|
|
303
306
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "catto.js",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "Universal module for everything.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
"jest": "^29.4.1"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"body-parser": "^1.20.
|
|
43
|
-
"discord.js": "^14.
|
|
44
|
-
"ejs": "^3.1.
|
|
42
|
+
"body-parser": "^1.20.2",
|
|
43
|
+
"discord.js": "^14.8.0",
|
|
44
|
+
"ejs": "^3.1.9",
|
|
45
45
|
"express": "^4.18.2",
|
|
46
46
|
"express-session": "^1.17.3",
|
|
47
47
|
"express-ws": "^5.0.2",
|
package/utils.js
CHANGED
|
@@ -4,3 +4,15 @@ Array.prototype.remove = function(index) {
|
|
|
4
4
|
Array.prototype.has = function(data) {
|
|
5
5
|
return this.includes(data);
|
|
6
6
|
};
|
|
7
|
+
var utils = {};
|
|
8
|
+
utils.waitFor = (obj, prop) => {
|
|
9
|
+
return new Promise(r => {
|
|
10
|
+
var i = setInterval(() => {
|
|
11
|
+
if (obj[prop]) {
|
|
12
|
+
clearInterval(i);
|
|
13
|
+
r();
|
|
14
|
+
}
|
|
15
|
+
}, 1);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
module.exports = utils;
|