172 lines
7.2 KiB
JavaScript
172 lines
7.2 KiB
JavaScript
const axios = require(`axios`);
|
|
const path = require('path');
|
|
const botConfig = require(path.join(__dirname, '../botconfig.json'));
|
|
const { generateUniqueId } = require(path.join(__dirname, '../functions/randomStr'));
|
|
const https = require('https');
|
|
const Invites = require(path.join(__dirname, '../models/registerInvite'));
|
|
const Embed = require(path.join(__dirname, '../functions/embed'));
|
|
|
|
// Create axios instance outside of module.exports
|
|
const makeRequest = axios.create({
|
|
baseURL: `https://rule7.zonies.xyz/api/v1`,
|
|
headers: {
|
|
"Authorization": `Bearer ${botConfig.rule7.apiKey}`
|
|
},
|
|
httpsAgent: new https.Agent({
|
|
rejectUnauthorized: false
|
|
})
|
|
});
|
|
|
|
module.exports = {
|
|
config: {
|
|
name: `register`,
|
|
usage: true,
|
|
cooldown: 10000,
|
|
available: true,
|
|
permissions: [''],
|
|
roles: ['staff', 'uploader', 'jrmod', 'mod'],
|
|
aliases: ["reg"],
|
|
dm: true
|
|
},
|
|
run: async (client, message, args, db) => {
|
|
try {
|
|
// If not in DM, check for permissions and roles
|
|
if (message.channel.type !== 'DirectMessage') {
|
|
// Check if user has any of the required roles
|
|
const hasRequiredRole = message.member.roles.some(role =>
|
|
module.exports.config.roles.includes(role.toLowerCase())
|
|
);
|
|
|
|
if (!hasRequiredRole && !client.config.owners.includes(message.authorId)) {
|
|
return message.reply({
|
|
embeds: [
|
|
new Embed()
|
|
.setColor("#FF0000")
|
|
.setDescription(`You don't have the required roles to use this command.`)
|
|
]
|
|
});
|
|
}
|
|
}
|
|
|
|
// Check if the command is used in a DM
|
|
if (message.channel.type !== 'DirectMessage') {
|
|
const inviteCode = generateUniqueId();
|
|
|
|
const staffRoles = {
|
|
is_staff: 0,
|
|
is_mod: 0,
|
|
is_jrmod: 0,
|
|
is_uploader: 0,
|
|
is_jruploader: 0
|
|
}
|
|
|
|
let memberRoles = message.member.roles;
|
|
|
|
// Set staff role values based on member's roles
|
|
if (memberRoles.includes(botConfig.roles[0].staff)) staffRoles.is_staff = 1;
|
|
if (memberRoles.includes(botConfig.roles[0].mod)) staffRoles.is_mod = 1;
|
|
if (memberRoles.includes(botConfig.roles[0].jrmod)) staffRoles.is_jrmod = 1;
|
|
if (memberRoles.includes(botConfig.roles[0].uploader)) staffRoles.is_uploader = 1;
|
|
if (memberRoles.includes(botConfig.roles[0].jruploader)) staffRoles.is_jruploader = 1;
|
|
|
|
const registerInvite = new Invites({
|
|
userId: message.author.id,
|
|
invite: inviteCode,
|
|
staffRoles,
|
|
createdAt: Date.now()
|
|
});
|
|
|
|
await registerInvite.save();
|
|
|
|
return message.reply({
|
|
content: `Run this command in a DM to the bot and use this invite code: \`${inviteCode}\`\n
|
|
**Usage:** \`!register ${inviteCode} <username> <email> <f95zone profile url>\`\n
|
|
**Note: This invite code will expire in 10 minutes.**`
|
|
});
|
|
}
|
|
|
|
const [invite, username, email, profileUrl] = args;
|
|
|
|
if (!invite || !username || !email || !profileUrl) {
|
|
return message.reply({
|
|
content: `[REG3] Please provide a invite code, username, email, and f95zone profile url. \n\n**Usage:** \`${client.prefix}register <invite> <username> <email> <f95zone profile url>\``
|
|
});
|
|
}
|
|
|
|
// DM flow - Use client.database instead of direct model
|
|
const registerInvite = await Invites.findOne({ invite: invite });
|
|
|
|
if (!registerInvite) {
|
|
return message.reply({
|
|
content: `[REG1] You don't have an invite code. Please run the command outside of DMs.`
|
|
});
|
|
}
|
|
|
|
if (registerInvite.createdAt + 10 * 60 * 1000 < Date.now()) {
|
|
await registerInvite.deleteOne({ invite: invite });
|
|
return message.reply({
|
|
content: `[REG2] Your invite code has expired. Please run the command outside of DMs.`
|
|
});
|
|
}
|
|
|
|
if (invite !== registerInvite.invite) {
|
|
return message.reply({
|
|
content: `[REG4] Invalid invite code. Please run the command outside of DMs.`
|
|
});
|
|
}
|
|
|
|
let f95zoneId = profileUrl.split('/')[4];
|
|
f95zoneId = f95zoneId.split('.')[1];
|
|
|
|
try {
|
|
const { data } = await makeRequest.post(`/bot/register`, {
|
|
username,
|
|
email,
|
|
f95_id: f95zoneId,
|
|
is_staff: registerInvite.staffRoles.is_staff,
|
|
is_mod: registerInvite.staffRoles.is_mod,
|
|
is_jrmod: registerInvite.staffRoles.is_jrmod,
|
|
is_uploader: registerInvite.staffRoles.is_uploader,
|
|
is_jruploader: registerInvite.staffRoles.is_jruploader
|
|
});
|
|
|
|
if (data.status === 'success') {
|
|
await registerInvite.deleteOne({ invite: invite });
|
|
return message.reply({
|
|
content: `[REG5] You have been registered. Please check your email for verification.`
|
|
});
|
|
} else if (data.status === 'invalid_email') {
|
|
return message.reply({
|
|
content: `[REG5.1] An error occurred during registration. ${data.msg}`
|
|
});
|
|
} else if (data.status === 'username_exists') {
|
|
return message.reply({
|
|
content: `[REG5.2] An error occurred during registration. ${data.msg}`
|
|
});
|
|
} else if (data.status === 'invalid_f95_id') {
|
|
return message.reply({
|
|
content: `[REG5.3] An error occurred during registration. ${data.msg}`
|
|
});
|
|
} else if (data.status === 'email_exists') {
|
|
return message.reply({
|
|
content: `[REG5.4] An error occurred during registration. ${data.msg}`
|
|
});
|
|
} else if (data.status === 'error') {
|
|
return message.reply({
|
|
content: `[REG5.5] An error occurred during registration. ${data.msg}`
|
|
});
|
|
}
|
|
} catch (apiError) {
|
|
return message.reply({
|
|
content: `[REG6] An error occurred during registration. Please try again later.\n\`${apiError}\``
|
|
});
|
|
}
|
|
} catch (error) {
|
|
console.error('Registration Error:', error);
|
|
return message.reply({
|
|
content: `[REG7] An unexpected error occurred. Please try again later.\n\`${error}\``
|
|
});
|
|
}
|
|
},
|
|
};
|