authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2020-11-18 10:34:28-05:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-01-02 23:03:54-08:00
logee442a62038119eb5d7bbb9670be0dc607e8fd3f
tree2661f0b6a83a1f294b5df64bf3fd2eefab851094
parent0b0b9e0764daca1bdc2905e2275d77f67c14fd2a
signaturelock-open Commit is signed but in an unrecognized format.

Update to discord.js v12 and fix intent issues


3 files changed, 473 insertions(+), 57 deletions(-)

index.js+106-26
......@@ -1,10 +1,19 @@
11const Discord = require('discord.js');
22const fs = require('fs');
3const client = new Discord.Client();
43const Color = require('color');
4const Long = require('long');
5const Cache = require('node-cache');
6const client = new Discord.Client({
7 cacheGuilds: true,
8 cacheChannels: false,
9 cacheOverwrites: false,
10 cacheRoles: true,
11 cacheEmojis: false,
12 cachePresences: false
13});
514
615function updateClientStatus() {
7 client.user.setActivity(`!paint -ing ${client.guilds.size} servers.`)
16 client.user.setActivity(`!paint | ${client.guilds.cache.size} servers.`)
817}
918
1019client.on('ready', () => {
......@@ -12,10 +21,57 @@ client.on('ready', () => {
1221 updateClientStatus();
1322});
1423
24const schedules = {}
25
26const rateLimitCache = new Cache({
27 stdTTL: 12
28})
29const rateLimitCache2 = new Cache({
30 stdTTL: 230
31})
32
33async function cleanup(guild) {
34 clearTimeout(schedules[guild.id]);
35 let n = 0;
36 const rolesToCheck = guild.roles.cache.filter(role => role.name.startsWith('#'));
37 const allMembers = await guild.members.fetch();
38 const colorUses = {};
39 allMembers.forEach(x => {
40 x.roles.cache.forEach(role => {
41 if (role.name.startsWith('#')) {
42 colorUses[role.id] = true;
43 }
44 });
45 });
46 await Promise.all(rolesToCheck.map(async (role) => {
47 if (!colorUses[role.id]) {
48 n++;
49 await role.delete();
50 }
51 }));
52 return n;
53}
54
55async function scheduleClean(guild) {
56 if (!schedules[guild.id]) {
57 return;
58 }
59 schedules[guild.id] = setTimeout(() => {
60 cleanup(guild)
61 }, 5 * 60 * 1000);
62}
63
1564client.on('message', async (msg) => {
1665 if (msg.author.bot) return;
1766
67 if (msg.content.trim() === '!help') {
68 msg.channel.send('Name Painter v2\n`!help` - cmd list\n`!paint` or `!color` - assign a color role **(available to all users)**\n`!clean-roles` - remove color roles no one has as the bot sometimes bugs')
69 }
1870 if (msg.content.startsWith('!paint') || msg.content.startsWith('!color')) {
71 if(rateLimitCache.get(msg.author.id)) {
72 msg.channel.send('> **Rate Limited**: This command can only be used every 12 seconds (per user).')
73 }
74
1975 const args = msg.content.split(' ');
2076 args.shift();
2177
......@@ -39,18 +95,22 @@ client.on('message', async (msg) => {
3995
4096 const hex = color.hex();
4197
42 let role = msg.guild.roles.find(role => role.name === hex);
98 rateLimitCache.set(msg.author.id , 'true');
99
100 let role = msg.guild.roles.cache.find(role => role.name === hex);
43101
44102 if (!role) {
45 if (msg.guild.roles.length === 250) {
103 if (msg.guild.roles.cache.length === 250) {
46104 msg.channel.send(`> **Error**: The Discord Role Limit of **250 Roles** has been hit!`);
47105 return;
48106 } else {
49107 try {
50 role = await msg.guild.createRole({
51 name: hex,
52 color: color.rgbNumber(),
53 permissions: 0,
108 role = await msg.guild.roles.create({
109 data: {
110 name: hex,
111 color: color.rgbNumber(),
112 permissions: 0,
113 }
54114 });
55115 } catch (error) {
56116 msg.channel.send(`> **Error**: Could not create a role for you!`);
......@@ -60,26 +120,39 @@ client.on('message', async (msg) => {
60120 }
61121
62122 try {
63 const rolesToRemove = msg.member.roles.filter(role => role.name.startsWith('#') && role.name !== hex);
123 const rolesToRemove = msg.member.roles.cache.filter(role => role.name.startsWith('#') && role.name !== hex);
64124 rolesToRemove.map(async (role) => {
65 msg.member.removeRole(role);
66 if (role.members.size === 1) {
67 role.delete();
68 }
125 msg.member.roles.remove(role);
69126 });
70 await msg.member.addRole(role);
127 await msg.member.roles.add(role);
71128 msg.channel.send(`> You\'ve been painted to **${hex}**`);
129
130 scheduleClean(msg.guild)
72131 } catch (error) {
73132 msg.channel.send(`> **Error**: Could not assign your role, ask the server admin to check my permissions (Requires 'Manage Roles').`);
74133 }
75134 }
135 if (msg.content.startsWith('!clean-roles')) {
136 if(rateLimitCache2.get(msg.guild.id)) {
137 msg.channel.send('> **Rate Limited**: This command can only be used every 230 seconds (per guild).\n> Note: role cleanup happens automatically up to 5 minutes after a !paint.')
138 return;
139 }
140 rateLimitCache2.set(msg.guild.id , 'true');
141 try {
142 const n = await cleanup(msg.guild);
143 msg.channel.send(`> Removed ${n} unused color roles.`);
144 } catch (error) {
145 console.log(error)
146 msg.channel.send(`> **Error**: Could not assign your role, ask the server admin to check my permissions (Requires 'Manage Roles').`);
147 }
148 }
76149});
77150
78151client.on('guildMemberRemove', (member) => {
79 const rolesToRemove = member.roles.filter(role => role.name.startsWith('#'));
152 const rolesToRemove = member.roles.cache.filter(role => role.name.startsWith('#'));
80153 setTimeout(() => {
81154 rolesToRemove.map(async (role) => {
82 if (role.members.size === 0) {
155 if (role.members.cache.size === 0) {
83156 role.delete();
84157 }
85158 });
......@@ -90,17 +163,24 @@ client.on('guildDelete', guild => {
90163 updateClientStatus();
91164});
92165
166function getDefaultChannel(guild) {
167 // Check for a "general" channel, which is often default chat
168 const generalChannel = guild.channels.cache.find(channel => channel.name === "general" && channel.permissionsFor(guild.client.user).has("SEND_MESSAGES"));
169 if (generalChannel)
170 return generalChannel;
171 // Now we get into the heavy stuff: first channel in order where the bot can speak
172 // hold on to your hats!
173 return guild.channels.cache
174 .filter(c => c.type === "text" &&
175 c.permissionsFor(guild.client.user).has("SEND_MESSAGES"))
176 .sort((a, b) => a.position - b.position ||
177 Long.fromString(a.id).sub(Long.fromString(b.id)).toNumber())
178 .first();
179}
180
93181client.on('guildCreate', guild => {
94 let defaultChannel = "";
95 guild.channels.forEach((channel) => {
96 if (channel.type == "text" && defaultChannel == "") {
97 if (channel.permissionsFor(guild.me).has("SEND_MESSAGES")) {
98 defaultChannel = channel;
99 }
100 }
101 })
102 //defaultChannel will be the channel object that it first finds the bot has permissions for
103 defaultChannel.send(`**I'm the Name Painter. I let users customize their name color.**
182 let defaultChannel = getDefaultChannel(guild);
183 defaultChannel && defaultChannel.send(`**I'm the Name Painter. I let users customize their name color.**
104184Some things to note
105185
106186- The paint command is available to all users in the server.
package-lock.json+364-30
......@@ -1,13 +1,293 @@
11{
22 "name": "name-paint",
33 "version": "1.0.0",
4 "lockfileVersion": 1,
4 "lockfileVersion": 2,
55 "requires": true,
6 "dependencies": {
7 "async-limiter": {
6 "packages": {
7 "": {
88 "version": "1.0.0",
9 "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
10 "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
9 "license": "ISC",
10 "dependencies": {
11 "color": "^3.1.2",
12 "discord.js-light": "^3.3.6",
13 "long": "^4.0.0",
14 "node-cache": "^5.1.2"
15 }
16 },
17 "node_modules/@discordjs/collection": {
18 "version": "0.1.6",
19 "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz",
20 "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ=="
21 },
22 "node_modules/@discordjs/form-data": {
23 "version": "3.0.1",
24 "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
25 "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
26 "dependencies": {
27 "asynckit": "^0.4.0",
28 "combined-stream": "^1.0.8",
29 "mime-types": "^2.1.12"
30 },
31 "engines": {
32 "node": ">= 6"
33 }
34 },
35 "node_modules/abort-controller": {
36 "version": "3.0.0",
37 "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
38 "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
39 "dependencies": {
40 "event-target-shim": "^5.0.0"
41 },
42 "engines": {
43 "node": ">=6.5"
44 }
45 },
46 "node_modules/asynckit": {
47 "version": "0.4.0",
48 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
49 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
50 },
51 "node_modules/clone": {
52 "version": "2.1.2",
53 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
54 "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
55 "engines": {
56 "node": ">=0.8"
57 }
58 },
59 "node_modules/color": {
60 "version": "3.1.2",
61 "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
62 "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
63 "dependencies": {
64 "color-convert": "^1.9.1",
65 "color-string": "^1.5.2"
66 }
67 },
68 "node_modules/color-convert": {
69 "version": "1.9.3",
70 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
71 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
72 "dependencies": {
73 "color-name": "1.1.3"
74 }
75 },
76 "node_modules/color-name": {
77 "version": "1.1.3",
78 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
79 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
80 },
81 "node_modules/color-string": {
82 "version": "1.5.3",
83 "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
84 "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
85 "dependencies": {
86 "color-name": "^1.0.0",
87 "simple-swizzle": "^0.2.2"
88 }
89 },
90 "node_modules/combined-stream": {
91 "version": "1.0.8",
92 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
93 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
94 "dependencies": {
95 "delayed-stream": "~1.0.0"
96 },
97 "engines": {
98 "node": ">= 0.8"
99 }
100 },
101 "node_modules/delayed-stream": {
102 "version": "1.0.0",
103 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
104 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
105 "engines": {
106 "node": ">=0.4.0"
107 }
108 },
109 "node_modules/discord.js": {
110 "version": "12.4.1",
111 "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.4.1.tgz",
112 "integrity": "sha512-KxOB8LOAN3GmrvkD6a6Fr1nlfArIFZ+q7Uqg4T/5duB90GZy9a0/Py2E+Y+eHKP6ZUCR2mbNMLCcHGjahiaNqA==",
113 "dependencies": {
114 "@discordjs/collection": "^0.1.6",
115 "@discordjs/form-data": "^3.0.1",
116 "abort-controller": "^3.0.0",
117 "node-fetch": "^2.6.1",
118 "prism-media": "^1.2.2",
119 "setimmediate": "^1.0.5",
120 "tweetnacl": "^1.0.3",
121 "ws": "^7.3.1"
122 },
123 "engines": {
124 "node": ">=12.0.0"
125 }
126 },
127 "node_modules/discord.js-light": {
128 "version": "3.3.6",
129 "resolved": "https://registry.npmjs.org/discord.js-light/-/discord.js-light-3.3.6.tgz",
130 "integrity": "sha512-j019wFUln49OwfKg5yRNbJyDTiwerYgHYRXSzd6qridZJNNsBzZ1d6RfDJdxGE+IPHwq3at9RGzop1Qb0IwZkw==",
131 "dependencies": {
132 "discord.js": "12.4.1"
133 },
134 "engines": {
135 "node": ">=12.0.0"
136 }
137 },
138 "node_modules/event-target-shim": {
139 "version": "5.0.1",
140 "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
141 "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
142 "engines": {
143 "node": ">=6"
144 }
145 },
146 "node_modules/is-arrayish": {
147 "version": "0.3.2",
148 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
149 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
150 },
151 "node_modules/long": {
152 "version": "4.0.0",
153 "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
154 "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
155 },
156 "node_modules/mime-db": {
157 "version": "1.44.0",
158 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
159 "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
160 "engines": {
161 "node": ">= 0.6"
162 }
163 },
164 "node_modules/mime-types": {
165 "version": "2.1.27",
166 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
167 "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
168 "dependencies": {
169 "mime-db": "1.44.0"
170 },
171 "engines": {
172 "node": ">= 0.6"
173 }
174 },
175 "node_modules/node-cache": {
176 "version": "5.1.2",
177 "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
178 "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
179 "dependencies": {
180 "clone": "2.x"
181 },
182 "engines": {
183 "node": ">= 8.0.0"
184 }
185 },
186 "node_modules/node-fetch": {
187 "version": "2.6.1",
188 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
189 "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
190 "engines": {
191 "node": "4.x || >=6.0.0"
192 }
193 },
194 "node_modules/prism-media": {
195 "version": "1.2.2",
196 "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz",
197 "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==",
198 "peerDependencies": {
199 "@discordjs/opus": "^0.1.0",
200 "ffmpeg-static": "^2.4.0 || ^3.0.0",
201 "node-opus": "^0.3.1",
202 "opusscript": "^0.0.6"
203 },
204 "peerDependenciesMeta": {
205 "@discordjs/opus": {
206 "optional": true
207 },
208 "ffmpeg-static": {
209 "optional": true
210 },
211 "node-opus": {
212 "optional": true
213 },
214 "opusscript": {
215 "optional": true
216 }
217 }
218 },
219 "node_modules/setimmediate": {
220 "version": "1.0.5",
221 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
222 "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
223 },
224 "node_modules/simple-swizzle": {
225 "version": "0.2.2",
226 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
227 "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
228 "dependencies": {
229 "is-arrayish": "^0.3.1"
230 }
231 },
232 "node_modules/tweetnacl": {
233 "version": "1.0.3",
234 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
235 "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
236 },
237 "node_modules/ws": {
238 "version": "7.4.0",
239 "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
240 "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
241 "engines": {
242 "node": ">=8.3.0"
243 },
244 "peerDependencies": {
245 "bufferutil": "^4.0.1",
246 "utf-8-validate": "^5.0.2"
247 },
248 "peerDependenciesMeta": {
249 "bufferutil": {
250 "optional": true
251 },
252 "utf-8-validate": {
253 "optional": true
254 }
255 }
256 }
257 },
258 "dependencies": {
259 "@discordjs/collection": {
260 "version": "0.1.6",
261 "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz",
262 "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ=="
263 },
264 "@discordjs/form-data": {
265 "version": "3.0.1",
266 "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
267 "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
268 "requires": {
269 "asynckit": "^0.4.0",
270 "combined-stream": "^1.0.8",
271 "mime-types": "^2.1.12"
272 }
273 },
274 "abort-controller": {
275 "version": "3.0.0",
276 "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
277 "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
278 "requires": {
279 "event-target-shim": "^5.0.0"
280 }
281 },
282 "asynckit": {
283 "version": "0.4.0",
284 "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
285 "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
286 },
287 "clone": {
288 "version": "2.1.2",
289 "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
290 "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
11291 },
12292 "color": {
13293 "version": "3.1.2",
......@@ -40,18 +320,47 @@
40320 "simple-swizzle": "^0.2.2"
41321 }
42322 },
323 "combined-stream": {
324 "version": "1.0.8",
325 "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
326 "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
327 "requires": {
328 "delayed-stream": "~1.0.0"
329 }
330 },
331 "delayed-stream": {
332 "version": "1.0.0",
333 "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
334 "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
335 },
43336 "discord.js": {
44 "version": "11.5.1",
45 "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.5.1.tgz",
46 "integrity": "sha512-tGhV5xaZXE3Z+4uXJb3hYM6gQ1NmnSxp9PClcsSAYFVRzH6AJH74040mO3afPDMWEAlj8XsoPXXTJHTxesqcGw==",
337 "version": "12.4.1",
338 "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.4.1.tgz",
339 "integrity": "sha512-KxOB8LOAN3GmrvkD6a6Fr1nlfArIFZ+q7Uqg4T/5duB90GZy9a0/Py2E+Y+eHKP6ZUCR2mbNMLCcHGjahiaNqA==",
47340 "requires": {
48 "long": "^4.0.0",
49 "prism-media": "^0.0.3",
50 "snekfetch": "^3.6.4",
51 "tweetnacl": "^1.0.0",
52 "ws": "^6.0.0"
341 "@discordjs/collection": "^0.1.6",
342 "@discordjs/form-data": "^3.0.1",
343 "abort-controller": "^3.0.0",
344 "node-fetch": "^2.6.1",
345 "prism-media": "^1.2.2",
346 "setimmediate": "^1.0.5",
347 "tweetnacl": "^1.0.3",
348 "ws": "^7.3.1"
349 }
350 },
351 "discord.js-light": {
352 "version": "3.3.6",
353 "resolved": "https://registry.npmjs.org/discord.js-light/-/discord.js-light-3.3.6.tgz",
354 "integrity": "sha512-j019wFUln49OwfKg5yRNbJyDTiwerYgHYRXSzd6qridZJNNsBzZ1d6RfDJdxGE+IPHwq3at9RGzop1Qb0IwZkw==",
355 "requires": {
356 "discord.js": "12.4.1"
53357 }
54358 },
359 "event-target-shim": {
360 "version": "5.0.1",
361 "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
362 "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
363 },
55364 "is-arrayish": {
56365 "version": "0.3.2",
57366 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
......@@ -62,10 +371,42 @@
62371 "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
63372 "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
64373 },
374 "mime-db": {
375 "version": "1.44.0",
376 "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
377 "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
378 },
379 "mime-types": {
380 "version": "2.1.27",
381 "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
382 "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
383 "requires": {
384 "mime-db": "1.44.0"
385 }
386 },
387 "node-cache": {
388 "version": "5.1.2",
389 "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz",
390 "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==",
391 "requires": {
392 "clone": "2.x"
393 }
394 },
395 "node-fetch": {
396 "version": "2.6.1",
397 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
398 "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
399 },
65400 "prism-media": {
66 "version": "0.0.3",
67 "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.3.tgz",
68 "integrity": "sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ=="
401 "version": "1.2.2",
402 "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz",
403 "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw==",
404 "requires": {}
405 },
406 "setimmediate": {
407 "version": "1.0.5",
408 "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
409 "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
69410 },
70411 "simple-swizzle": {
71412 "version": "0.2.2",
......@@ -75,23 +416,16 @@
75416 "is-arrayish": "^0.3.1"
76417 }
77418 },
78 "snekfetch": {
79 "version": "3.6.4",
80 "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz",
81 "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw=="
82 },
83419 "tweetnacl": {
84 "version": "1.0.1",
85 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz",
86 "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="
420 "version": "1.0.3",
421 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
422 "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
87423 },
88424 "ws": {
89 "version": "6.2.1",
90 "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
91 "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
92 "requires": {
93 "async-limiter": "~1.0.0"
94 }
425 "version": "7.4.0",
426 "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.0.tgz",
427 "integrity": "sha512-kyFwXuV/5ymf+IXhS6f0+eAFvydbaBW3zjpT6hUdAh/hbVjTIB5EHBGi0bPoCLSK2wcuz3BrEkB9LrYv1Nm4NQ==",
428 "requires": {}
95429 }
96430 }
97431}
package.json+3-1
......@@ -10,6 +10,8 @@
1010 "license": "ISC",
1111 "dependencies": {
1212 "color": "^3.1.2",
13 "discord.js": "^11.5.1"
13 "discord.js-light": "^3.3.6",
14 "long": "^4.0.0",
15 "node-cache": "^5.1.2"
1416 }
1517}