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.
Files changed (3) hide show
  1. package/Bot.js +48 -45
  2. package/package.json +4 -4
  3. 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
- if (typeof EventEmitter !== "undefined") {} else {
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
- var interaction = new Discord.BaseInteraction(this.client, req.body);
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.5",
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.1",
43
- "discord.js": "^14.7.1",
44
- "ejs": "^3.1.8",
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;