authorgravatar for git@paperclover.netclover caruso <git@paperclover.net> 2019-07-27 15:55:39-04:00
committergravatar for git@paperclover.netclover caruso <git@paperclover.net> 2026-01-02 23:03:54-08:00
log872c9ee5421cd705ea1424ab4f7d6baebb895704
tree4d53474bc751f9c619b7671bd422e705c0afa258
signaturelock-open Commit is signed but in an unrecognized format.

Initial Commit


5 files changed, 211 insertions(+), 0 deletions(-)

.gitignore created+2
...@@ -0,0 +1,2 @@
1token
2node_modules
index.js created+97
...@@ -0,0 +1,97 @@
1const Discord = require('discord.js');
2const fs = require('fs');
3const client = new Discord.Client();
4const Color = require('color');
5
6client.on('ready', () => {
7 console.log(`Logged in as ${client.user.tag}!`);
8});
9
10client.on('message', async (msg) => {
11 if (msg.author.bot) return;
12
13 if (msg.content.startsWith('!paint') || msg.content.startsWith('!color')) {
14 const args = msg.content.split(' ');
15 args.shift();
16
17 if (args.length === 0) {
18 msg.channel.send('> **Usage**: !paint <color>\n> Where <color> is any valid HEX or CSS color value.')
19 return;
20 }
21
22 const input = args.join(' ');
23 let color;
24 try {
25 color = Color(input);
26 } catch (error) {
27 try {
28 color = Color('#' + input);
29 } catch (error) {
30 msg.channel.send(`> Could not get a color from ${input.replace(/\n/g, '').replace(/`/g, '\\\\`')}`)
31 return;
32 }
33 }
34
35 const hex = color.hex();
36
37 let role = msg.guild.roles.find(role => role.name === hex);
38
39 if (!role) {
40 if (msg.guild.roles.length === 250) {
41 msg.channel.send(`> **Error**: The Discord Role Limit of **250 Roles** has been hit!`);
42 return;
43 } else {
44 try {
45 role = await msg.guild.createRole({
46 name: hex,
47 color: color.rgbNumber(),
48 permissions: 0,
49 });
50 } catch (error) {
51 msg.channel.send(`> **Error**: Could not create a role for you!`);
52 return;
53 }
54 }
55 }
56
57 try {
58 const rolesToRemove = msg.member.roles.filter(role => role.name.startsWith('#') && role.name !== hex);
59 rolesToRemove.map(async (role) => {
60 msg.member.removeRole(role);
61 if (role.members.size === 0) {
62 console.log('Deleting ' + role.name)
63 role.delete();
64 }
65 });
66 await msg.member.addRole(role);
67 msg.channel.send(`> You\'ve been painted to **${hex}**`);
68 } catch (error) {
69 console.log(error);
70 msg.channel.send(`> **Error**: Could not assign your role, ask the server admin to check my permissions.`);
71 }
72 }
73});
74
75client.on('guildCreate', guild => {
76 let defaultChannel = "";
77 guild.channels.forEach((channel) => {
78 if (channel.type == "text" && defaultChannel == "") {
79 if (channel.permissionsFor(guild.me).has("SEND_MESSAGES")) {
80 defaultChannel = channel;
81 }
82 }
83 })
84 //defaultChannel will be the channel object that it first finds the bot has permissions for
85 defaultChannel.send(`**I'm the Name Painter. I let users customize their name color.**
86Some things to note
87
88- The paint command is available to all users in the server.
89- You should not have existing roles that start with #
90- You generally should not assign the roles manually
91
92To use me, simply run
93> !paint <color>
94> Where <color> is any valid HEX or CSS color value.`);
95});
96
97client.login(fs.readFileSync('token').toString().replace(/ |\n/g,''));
logo.png
Binary files /dev/null and b/logo.png differ
package-lock.json created+97
...@@ -0,0 +1,97 @@
1{
2 "name": "name-paint",
3 "version": "1.0.0",
4 "lockfileVersion": 1,
5 "requires": true,
6 "dependencies": {
7 "async-limiter": {
8 "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=="
11 },
12 "color": {
13 "version": "3.1.2",
14 "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
15 "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
16 "requires": {
17 "color-convert": "^1.9.1",
18 "color-string": "^1.5.2"
19 }
20 },
21 "color-convert": {
22 "version": "1.9.3",
23 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
24 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
25 "requires": {
26 "color-name": "1.1.3"
27 }
28 },
29 "color-name": {
30 "version": "1.1.3",
31 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
32 "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
33 },
34 "color-string": {
35 "version": "1.5.3",
36 "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
37 "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
38 "requires": {
39 "color-name": "^1.0.0",
40 "simple-swizzle": "^0.2.2"
41 }
42 },
43 "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==",
47 "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"
53 }
54 },
55 "is-arrayish": {
56 "version": "0.3.2",
57 "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
58 "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
59 },
60 "long": {
61 "version": "4.0.0",
62 "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
63 "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
64 },
65 "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=="
69 },
70 "simple-swizzle": {
71 "version": "0.2.2",
72 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
73 "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
74 "requires": {
75 "is-arrayish": "^0.3.1"
76 }
77 },
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 },
83 "tweetnacl": {
84 "version": "1.0.1",
85 "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz",
86 "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A=="
87 },
88 "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 }
95 }
96 }
97}
package.json created+15
...@@ -0,0 +1,15 @@
1{
2 "name": "name-paint",
3 "version": "1.0.0",
4 "description": "Discord Bot to let people paint their name anything.",
5 "main": "index.js",
6 "scripts": {
7 "start": "node index.js"
8 },
9 "author": "",
10 "license": "ISC",
11 "dependencies": {
12 "color": "^3.1.2",
13 "discord.js": "^11.5.1"
14 }
15}