-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathguildMemberAdd.js
284 lines (253 loc) · 12.9 KB
/
guildMemberAdd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
const Discord = require('discord.js');
const { v4: uuidv4 } = require('uuid');
const fetch = require('node-fetch');
const { COLORS, PREFIX, EMAIL_REGEX } = require('../utils/constants');
const { logger } = require('../utils/logger');
const { MESSAGES } = require('./messages/onboarding');
const { sendDissapearingMessage } = require('../utils/functions');
const { addNewMember, getMember, updateBanOrKickMember } = require('../firebase/firebase_handler');
const { sendMail } = require('../utils/mailHandler');
const { checkAuth } = require('../excel/spreadsheet_handler');
module.exports = {
name: 'guildMemberAdd',
/**
* @param {Discord.GuildMember} member
* @param {Discord.Client} client
* */
async execute(member, client) {
await updateBanOrKickMember(member, { reason: '' }, { reason: '' }, false);
const user = await getMember(member);
if (user.verified) {
try {
await member.setNickname(user.name);
} catch (error) {}
const serverConfig = client.configs.get(member.guild.id);
const memberRole = member.guild.roles.cache.get(serverConfig.member_role_id);
await member.roles.add(memberRole);
return;
}
if (member.user.bot) return;
const serverConfig = client.configs.get(member.guild.id);
const unverifiedRole = member.guild.roles.cache.get(serverConfig.unverified_role_id);
await member.roles.add(unverifiedRole);
const channel = member.guild.channels.cache.get(serverConfig.verification_channel_id);
this.sendVerify(member, channel);
},
/**
* @param {Discord.GuildMember} member
* @param {Discord.GuildChannel} channel
*/
async sendVerify(member, channel) {
const message = MESSAGES.WELCOME_MESSAGE.replace('@USERNAME', member.user).replace('@USERNAME', member.user);
try {
const embed = new Discord.MessageEmbed()
.setTitle('Verification')
.setColor(COLORS.cyan)
.setDescription(
[
`Check your DM for verification ${member.user}`,
"\nIf you haven't recieved the message",
`Type \`${PREFIX}verify-me\` here`,
].join('\n')
)
.setImage('attachment://help.png');
await member.send(message);
await channel.send({
embed,
files: [
{
attachment: './assets/help.png',
name: 'help.png',
},
],
});
} catch (error) {
const embed = new Discord.MessageEmbed()
.setTitle('I am unable to send you a message for verification')
.setColor(COLORS.red)
.setThumbnail(member.user.displayAvatarURL())
.setDescription(
[
`${member.user}`,
'1. Please go your discord user **settings**',
'2. Go to **Privacy & Safety** menu',
'3. Enable **Allow direct messages from server members**',
`\nAfter that type \`${PREFIX}verify-me\` here`,
].join('\n')
)
.setFooter('Feel free to disable the Allow direct messages from server members option after verification');
await channel.send(embed);
}
},
/**
* @param {Discord.Message} message
* @param {Discord.Client} client
*/
async messageHandler(message, client) {
let guildID;
if (PREFIX === '!') guildID = require('../configs/tt-server').id;
else guildID = require('../configs/test').id;
console.log(client.guilds.cache.get(guildID));
const user = client.guilds.cache.get(guildID).members.cache.get(message.author.id);
let command;
let args;
const tempUser = await getMember(user);
if (tempUser.verified) return;
if (message.content.toLowerCase().trim() === 'yes') command = 'yes';
else if (message.content.startsWith(PREFIX)) {
args = message.content.slice(PREFIX.length).trim().split(' ');
command = args.shift().toLowerCase();
} else {
const possibleMessage = [
{
message: MESSAGES.WELCOME_MESSAGE.replace('@USERNAME', user.user).replace('@USERNAME', user.user),
command: 'name',
},
{
message: MESSAGES.QUESTION_TWO.replace('@ANSWER_NAME', tempUser.name).replace('@ANSWER_NAME', tempUser.name),
command: 'email',
},
{ message: MESSAGES.QUESTION_THREE.replace('@EMAIL', tempUser.email), command: 'verify' },
{ message: MESSAGES.QUESTION_FOUR, command: 'gh' },
{
message: MESSAGES.QUESTION_FIVE.replace('@GITHUB', tempUser.github.replace('https://github.com/', '')),
command: 'yes',
},
];
const previousMessage = (await message.channel.messages.fetch())
.filter((e) => e.author.bot)
.filter((e) => e.content !== '')
.first().content;
const bestMessage = possibleMessage.find((e) => e.message === previousMessage);
if (bestMessage === undefined) {
return message.channel.send(possibleMessage[0].message);
}
command = bestMessage.command;
args = message.content.trim().split(' ');
}
try {
logger.info(`${user.user.tag} is using DM: ${command}`);
if (command === 'verify-me') {
return message.channel.send(MESSAGES.WELCOME_MESSAGE.replace('@USERNAME', user).replace('@USERNAME', user));
}
if (command === 'name') {
if (!args[0]) return sendDissapearingMessage(message, '**Invalid Name!**');
const name = args.join(' ').trim();
if (!/^[a-zA-Z ]+$/.test(name)) return sendDissapearingMessage(message, '**Invalid Name!**');
await addNewMember({ user, name });
try {
await user.setNickname(name);
} catch (error) {}
const msg = MESSAGES.QUESTION_TWO.replace('@ANSWER_NAME', name).replace('@ANSWER_NAME', name);
return message.channel.send(msg);
}
if (command === 'email') {
if (!args[0]) return sendDissapearingMessage(message, '**Invalid Email!**');
const email = args[0].trim();
if (!EMAIL_REGEX.test(email)) return sendDissapearingMessage(message, '**Invalid Email Entered!**');
if (!(await checkAuth(email))) {
const embed = new Discord.MessageEmbed()
.setTitle('⛔ Unauthorized User ⛔')
.setColor(COLORS.red)
.setDescription(
[
'Hi, this is an exclusive server for **neoG Camp 2022 students** and team.',
'You are not authorised to be a member of this server.',
'Please use the mail you have provided us',
'If you think we are at mistake and you should be a member, then please take a screenshot and mail to [email protected]_ the issue.',
].join('\n')
);
return message.channel.send(embed);
}
const verificationCode = uuidv4().replace('-', '').slice(0, 10).toLocaleUpperCase();
await addNewMember({ user, email, verificationCode, verifiedEmail: false });
let embed = new Discord.MessageEmbed()
.setTitle(`Sending verification code to: ${email}`)
.setColor(COLORS.yellow)
.setDescription('Please wait this might take a few minutes');
message.channel.send(embed);
const mailStatus = await sendMail(email, verificationCode);
if (mailStatus) {
const msg = MESSAGES.QUESTION_THREE.replace('@EMAIL', email);
return message.channel.send(msg);
}
embed = new Discord.MessageEmbed()
.setTitle('⛔ **We are experiencing some issues right now** ⛔')
.setColor(COLORS.red)
.setDescription(MESSAGES.ERROR_MAIL);
return message.channel.send(embed);
}
if (command === 'verify') {
if (!args[0]) return sendDissapearingMessage(message, '**Invalid Verification Code Entered!**');
const verificationCode = args[0].trim();
if ((await getMember(user)).verificationCode === verificationCode) {
await addNewMember({ user, verifiedEmail: true });
const msg = MESSAGES.QUESTION_FOUR;
return message.channel.send(msg);
}
return sendDissapearingMessage(message, '**Invalid Verification Code Entered!**');
}
if (command === 'gh') {
if (!args[0]) return sendDissapearingMessage(message, '**Invalid GitHub ID Entered!**');
const github = args[0].trim().toLowerCase().replace('https://github.com/', '');
const gitURL = `https://github.com/${github}`;
const response = await fetch(gitURL);
const invalidWords = ['no', 'not', 'i', 'na', '.', 'im', 'nil', 'what'];
const invalidGithubId = invalidWords.some((e) => e === github);
if (response.status === 200 && !invalidGithubId && github.length !== 0) {
await addNewMember({ user, github: gitURL });
const msg = MESSAGES.QUESTION_FIVE.replace('@GITHUB', github);
return message.channel.send(msg);
}
return sendDissapearingMessage(message, '**Invalid GitHub ID Entered!**');
}
if (command === 'yes') {
const commandMessage = message.content.toLowerCase().trim();
if (commandMessage !== 'yes' && commandMessage !== `${PREFIX}yes`) {
return sendDissapearingMessage(message, 'You must say `yes` to the code of conduct to move forward');
}
const person = await getMember(user);
if (person.email === 'Not Provided' || person.name === 'Not Provided' || !person.verifiedEmail) {
const embed = new Discord.MessageEmbed()
.setColor(COLORS.red)
.setThumbnail(user.user.displayAvatarURL())
.addField(`${user.user.tag}`, `${user.user}`)
.addField('Email:', person.email)
.addField('GitHub:', person.github)
.addField('Email Verified:', person.verifiedEmail ? ':white_check_mark:' : ':x:')
.setFooter('Please fill in the required fields');
return message.channel.send(embed);
}
const serverConfig = client.configs.get(guildID);
await user.roles.add(serverConfig.member_role_id);
await user.roles.remove(serverConfig.unverified_role_id);
await addNewMember({ user, verified: true });
const msg = MESSAGES.FINAL;
await message.channel.send(msg);
const guild = client.guilds.cache.get(guildID);
const channel = guild.channels.cache.get(serverConfig.welcome_channel_id);
logger.info(`${guild.name}:A new member just arrived: ${user.user.tag}`);
const embed = new Discord.MessageEmbed({
title: 'A new member just arrived!',
description: [
`Welcome ${user.nickname ? user.nickname : user.displayName} we hope you enjoy your stay here!`,
'\nI am neoG22 Bot',
].join('\n'),
thumbnail: { url: user.user.displayAvatarURL() },
color: COLORS.cyan,
});
channel.send(embed);
}
} catch (e) {
logger.error(`Command: ${command} Error: ${e.message} | ${e?.stack}`);
const embed = new Discord.MessageEmbed({
title: 'Error Occured',
description: 'Check your commands',
color: COLORS.red,
});
return message.channel.send(embed).then((msg) => {
msg.delete({ timeout: 5000 });
});
}
},
};