Revert "Making all files use prettier"

This reverts commit 5aa85986cd.
This commit is contained in:
2023-08-31 23:13:47 +02:00
parent 99167be941
commit 0952d89809
49 changed files with 3777 additions and 4018 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
node_modules/* node_modules/*
.env .env
.prettierrc
.editorconfig .editorconfig

View File

@@ -1,3 +1,4 @@
docker-build: docker-build:
image: docker:latest image: docker:latest
stage: build stage: build

View File

@@ -1,35 +1,34 @@
const { ContextMenuCommandBuilder, ApplicationCommandType, PermissionFlagsBits, userMention } = require("discord.js"); const { ContextMenuCommandBuilder, ApplicationCommandType, PermissionFlagsBits, userMention} = require('discord.js');
module.exports = { module.exports = {
name: "congratsmessage", name: 'congratsmessage',
description: "Congratulate a user.", description: 'Congratulate a user.',
type: "contextmenu", type: 'contextmenu',
data: new ContextMenuCommandBuilder() data: new ContextMenuCommandBuilder()
.setName("Congratulate") .setName('Congratulate')
.setType(ApplicationCommandType.Message) .setType(ApplicationCommandType.Message)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages), .setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages),
async execute(interaction) { async execute(interaction) {
const { targetId } = interaction;
const { targetId } = interaction
const message = await interaction.channel.messages.fetch(targetId); const message = await interaction.channel.messages.fetch(targetId);
if (!message) { if (!message) {
return interaction.reply({ content: "That user does not exist.", ephemeral: true }); return interaction.reply({ content: 'That user does not exist.', ephemeral: true });
} }
const target = message.author; const target = message.author;
await message.reply({ await message.reply({
embeds: [ embeds:[{
{ title: 'Congratulations!',
title: "Congratulations!",
description: `GG to ${userMention(target.id)}!`, description: `GG to ${userMention(target.id)}!`,
}, }]
],
}); });
await message.react("🎉"); await message.react('🎉');
await interaction.reply({ content: `Sent a congrats message`, ephemeral: true }); await interaction.reply({ content: `Sent a congrats message`, ephemeral: true });
}, }
}; };

View File

@@ -1,36 +1,34 @@
const { ContextMenuCommandBuilder, ApplicationCommandType, PermissionFlagsBits } = require("discord.js"); const { ContextMenuCommandBuilder, ApplicationCommandType, PermissionFlagsBits } = require('discord.js');
module.exports = { module.exports = {
name: "resetnick", name: 'resetnick',
description: "Reset your nickname.", description: 'Reset your nickname.',
type: "contextmenu", type: 'contextmenu',
data: new ContextMenuCommandBuilder() data: new ContextMenuCommandBuilder()
.setName("Reset Nickname") .setName('Reset Nickname')
.setType(ApplicationCommandType.User) .setType(ApplicationCommandType.User)
.setDefaultMemberPermissions(PermissionFlagsBits.ManageNicknames), .setDefaultMemberPermissions(PermissionFlagsBits.ManageNicknames),
async execute(interaction) { async execute(interaction) {
const { targetId } = interaction;
const { targetId } = interaction
const target = await interaction.guild.members.fetch(targetId); const target = await interaction.guild.members.fetch(targetId);
if (!target) { if (!target) {
return interaction.reply({ content: "That user does not exist.", ephemeral: true }); return interaction.reply({ content: 'That user does not exist.', ephemeral: true });
} }
if (target.id === interaction.user.id) { if (target.id === interaction.user.id) {
return interaction.reply({ content: "You can't reset your own nickname.", ephemeral: true }); return interaction.reply({ content: 'You can\'t reset your own nickname.', ephemeral: true });
} }
if (!target.manageable) { if (!target.manageable) {
return interaction.reply({ content: "I cannot reset that user's nickname.", ephemeral: true }); return interaction.reply({ content: 'I cannot reset that user\'s nickname.', ephemeral: true });
} }
await target.setNickname( await target.setNickname(target.user.username, 'Reset by ' + interaction.user.username + "#" + interaction.user.discriminator);
target.user.username,
"Reset by " + interaction.user.username + "#" + interaction.user.discriminator,
);
return interaction.reply({ content: `Reset ${target.user.username}'s nickname.`, ephemeral: true }); return interaction.reply({ content: `Reset ${target.user.username}'s nickname.`, ephemeral: true });
}, }
}; };

View File

@@ -1,24 +1,34 @@
const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const getuuid = require("../utils/functions"); const getuuid = require('../utils/functions');
module.exports = { module.exports = {
name: "dev-info", name: 'dev-info',
description: "Test command for the bot.", description: 'Test command for the bot.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("dev-info") .setName('dev-info')
.setDescription("Test command for the bot.") .setDescription('Test command for the bot.')
.addStringOption((option) => option.setName("test").setDescription("Test option.")) .addStringOption(option =>
.addStringOption((option) => option.setName("test2").setDescription("Test option.")) option
.addStringOption((option) => option.setName("test3").setDescription("Test option.")) .setName('test')
.setDescription('Test option.'))
.addStringOption(option =>
option
.setName('test2')
.setDescription('Test option.'))
.addStringOption(option =>
option
.setName('test3')
.setDescription('Test option.'))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const test = interaction.options.getString("test");
const test2 = interaction.options.getString("test2"); const test = interaction.options.getString('test');
const test3 = interaction.options.getString("test3"); const test2 = interaction.options.getString('test2');
const test3 = interaction.options.getString('test3');
const message = await interaction.channel.messages.fetch(test); const message = await interaction.channel.messages.fetch(test);
const embed = message.embeds[0]; const embed = message.embeds[0];
@@ -27,6 +37,6 @@ module.exports = {
console.log(field1.value); console.log(field1.value);
await interaction.reply({ content: "Test command.", ephemeral: true }); await interaction.reply({ content: 'Test command.', ephemeral: true });
}, }
}; };

View File

@@ -1,87 +1,88 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const dev = process.env.DEV; const dev = process.env.DEV;
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
const { admin, helper, muted } = require("../config/roles.json"); const { admin, helper, muted } = require('../config/roles.json');
const { staffOtherChannel } = require("../config/options.json"); const { staffOtherChannel } = require('../config/options.json');
module.exports = { module.exports = {
name: "mute", name: 'mute',
description: "Mute a user", description: 'Mute a user',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("mute") .setName('mute')
.setDescription("Mute a user") .setDescription('Mute a user')
.addUserOption((option) => option.setName("user").setDescription("The user to mute").setRequired(true)) .addUserOption(option =>
.addStringOption((option) => option.setName("reason").setDescription("The reason for the mute")) option
.addStringOption((option) => option.setName("duration").setDescription("The duration of the mute")) .setName('user')
.setDescription('The user to mute')
.setRequired(true))
.addStringOption(option =>
option
.setName('reason')
.setDescription('The reason for the mute'))
.addStringOption(option =>
option
.setName('duration')
.setDescription('The duration of the mute'))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const member1 = interaction.options.getUser("user");
const member = interaction.guild.members.cache.get(member1.id);
const reason = interaction.options.getString("reason") ?? "No reason provided";
const duration = interaction.options.getString("duration");
const guild = interaction.guild;
const embedColor = Number(color.replace("#", "0x"));
const userRoles = await guild.members const member1 = interaction.options.getUser('user');
.fetch(interaction.user.id) const member = interaction.guild.members.cache.get(member1.id);
.then((member) => member.roles.cache.map((role) => role.id)); const reason = interaction.options.getString('reason') ?? 'No reason provided';
const memberRoles = await guild.members const duration = interaction.options.getString('duration');
.fetch(member1.id) const guild = interaction.guild;
.then((member) => member.roles.cache.map((role) => role.id)); const embedColor = Number(color.replace('#', '0x'));
const userRoles = await guild.members.fetch(interaction.user.id).then(member => member.roles.cache.map(role => role.id));
const memberRoles = await guild.members.fetch(member1.id).then(member => member.roles.cache.map(role => role.id));
await interaction.deferReply({}); await interaction.deferReply({});
if (!userRoles.includes(admin || helper)) { if (!userRoles.includes(admin || helper)) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "You don't have permission to use this command.", description: "You don't have permission to use this command.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
],
}); });
return; return
} }
if (member.id === interaction.user.id) { if (member.id === interaction.user.id) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "You can't mute yourself.", description: "You can't mute yourself.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
],
}); });
return; return
} }
if (member.id === dev) { if (member.id === dev) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "You can't mute my developer.", description: "You can't mute my developer.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
],
}); });
return; return
} }
// if (memberRoles.includes(admin) || memberRoles.includes(helper)) { // if (memberRoles.includes(admin) || memberRoles.includes(helper)) {
@@ -101,27 +102,25 @@ module.exports = {
if (!duration) { if (!duration) {
await member.roles.add(muted, reason); await member.roles.add(muted, reason);
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Successfully muted " + userMention(member1.id) + " forever.", description: "Successfully muted " + userMention(member1.id) + " forever.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
console.log(duration); console.log(duration);
const weeks = duration.replace(/[0-9][dhms]/g, "").replace(/w/g, ""); const weeks = duration.replace(/[0-9][dhms]/g, '').replace(/w/g, '')
const days = duration.replace(/[0-9][whms]/g, "").replace(/d/g, ""); const days = duration.replace(/[0-9][whms]/g, '').replace(/d/g, '')
const hours = duration.replace(/[0-9][wdms]/g, "").replace(/h/g, ""); const hours = duration.replace(/[0-9][wdms]/g, '').replace(/h/g, '')
const minutes = duration.replace(/[0-9][wdhs]/g, "").replace(/m/g, ""); const minutes = duration.replace(/[0-9][wdhs]/g, '').replace(/m/g, '')
const seconds = duration.replace(/[0-9][wdhm]/g, "").replace(/s/g, ""); const seconds = duration.replace(/[0-9][wdhm]/g, '').replace(/s/g, '')
const nweeks = Number(weeks) ?? 0; const nweeks = Number(weeks) ?? 0;
const ndays = Number(days) ?? 0; const ndays = Number(days) ?? 0;
@@ -130,25 +129,18 @@ module.exports = {
const nseconds = Number(seconds) ?? 0; const nseconds = Number(seconds) ?? 0;
const time = nweeks * 604800000 + ndays * 86400000 + nhours * 3600000 + nminutes * 60000 + nseconds * 1000; const time = nweeks * 604800000 + ndays * 86400000 + nhours * 3600000 + nminutes * 60000 + nseconds * 1000;
const mutedTime = const mutedTime = (nweeks > 0 ? nweeks + " week(s), " : "") + (ndays > 0 ? ndays + " day(s), " : "") + (nhours > 0 ? nhours + " hour(s), " : "") + (nminutes > 0 ? nminutes + " minute(s), " : "") + (nseconds > 0 ? nseconds + " second(s)" : "");
(nweeks > 0 ? nweeks + " week(s), " : "") +
(ndays > 0 ? ndays + " day(s), " : "") +
(nhours > 0 ? nhours + " hour(s), " : "") +
(nminutes > 0 ? nminutes + " minute(s), " : "") +
(nseconds > 0 ? nseconds + " second(s)" : "");
await member.roles.add(muted, reason); await member.roles.add(muted, reason);
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Successfully muted " + userMention(member1.id) + " for " + mutedTime + ".", description: "Successfully muted " + userMention(member1.id) + " for " + mutedTime + ".",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
],
}); });
const logChannel = interaction.guild.channels.cache.get(staffOtherChannel); const logChannel = interaction.guild.channels.cache.get(staffOtherChannel);
@@ -156,17 +148,15 @@ module.exports = {
setTimeout(async () => { setTimeout(async () => {
await member.roles.remove(muted, "Mute duration has ended."); await member.roles.remove(muted, "Mute duration has ended.");
await logChannel.send({ await logChannel.send({
embeds: [ embeds: [{
{
description: userMention(member1.id) + " has been unmuted.", description: userMention(member1.id) + " has been unmuted.",
color: embedColor, color: embedColor,
footer: { footer: {
text: "ID: " + member1.id, text: "ID: " + member1.id,
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
}, time); }, time);
}, }
}; };

View File

@@ -14,7 +14,9 @@ module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("check") .setName("check")
.setDescription("Check a player's stats.") .setDescription("Check a player's stats.")
.addStringOption((option) => option.setName("ign").setDescription("The player's IGN.").setRequired(true)) .addStringOption((option) => option.setName("ign")
.setDescription("The player's IGN.")
.setRequired(true))
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
@@ -22,8 +24,8 @@ module.exports = {
const ign = interaction.options.getString("ign"); const ign = interaction.options.getString("ign");
const mojang = "https://api.mojang.com/users/profiles/minecraft/"; const mojang = "https://api.mojang.com/users/profiles/minecraft/";
const hypixel = "https://api.hypixel.net/player"; const hypixel = "https://api.hypixel.net/player"
const guildAPI = "https://api.hypixel.net/guild"; const guildAPI = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const head = minotar + ign; const head = minotar + ign;
@@ -37,7 +39,9 @@ module.exports = {
await fetch(mojang + ign); await fetch(mojang + ign);
} catch (error) { } catch (error) {
interaction.editReply({ interaction.editReply({
embeds: [{ description: "That player doesn't exist.", color: embedColor }], embeds: [
{ description: "That player doesn't exist.", color: embedColor }
]
}); });
return; return;
} }
@@ -45,17 +49,15 @@ module.exports = {
const userCheck = await fetch(mojang + ign); const userCheck = await fetch(mojang + ign);
const uuid = userCheck.data.id; const uuid = userCheck.data.id;
const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + uuid; const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + uuid
const stats = await fetch(player); const stats = await fetch(player);
if (!stats.data.player) { if (!stats.data.player) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{
description: "That player hasn't played Hypixel before.", description: "That player hasn't played Hypixel before.",
color: embedColor, color: embedColor
}, }]
],
}); });
return; return;
} }
@@ -63,19 +65,19 @@ module.exports = {
const rank2 = stats.data.player.newPackageRank; const rank2 = stats.data.player.newPackageRank;
const monthlyRank = stats.data.player.monthlyPackageRank; const monthlyRank = stats.data.player.monthlyPackageRank;
if (rank2 === "VIP") { if (rank2 === 'VIP') {
var rank = "[VIP] "; var rank = "[VIP] "
} else if (rank2 === "VIP_PLUS") { } else if (rank2 === 'VIP_PLUS') {
var rank = "[VIP+] "; var rank = "[VIP+] "
} else if (rank2 === "MVP") { } else if (rank2 === 'MVP') {
var rank = "[MVP] "; var rank = "[MVP] "
} else if (rank2 === "MVP_PLUS" && monthlyRank === "NONE") { } else if (rank2 === 'MVP_PLUS' && monthlyRank === 'NONE') {
var rank = "[MVP+] "; var rank = "[MVP+] "
} else if (rank2 === "MVP_PLUS" && monthlyRank === "SUPERSTAR") { } else if (rank2 === 'MVP_PLUS' && monthlyRank === 'SUPERSTAR') {
var rank = "[MVP++] "; var rank = "[MVP++] "
} }
const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + uuid; const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + uuid
const guildCheck = await fetch(guild); const guildCheck = await fetch(guild);
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
@@ -85,11 +87,11 @@ module.exports = {
} }
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var guildTag = ""; var guildTag = ""
} else if (!guildCheck.data.guild.tag) { } else if (!guildCheck.data.guild.tag) {
var guildTag = ""; var guildTag = ""
} else { } else {
var guildTag = " [" + guildCheck.data.guild.tag + "]"; var guildTag = " [" + guildCheck.data.guild.tag + "]"
} }
//bedwars level //bedwars level
@@ -111,9 +113,9 @@ module.exports = {
//skywars wins //skywars wins
const hsswwins = stats.data.player.stats.SkyWars.wins; const hsswwins = stats.data.player.stats.SkyWars.wins;
// dueks kdr // dueks kdr
const hsduelskills = stats.data.player.stats.Duels.kills; const hsduelskills = stats.data.player.stats.Duels.kills
const hsduelsdeaths = stats.data.player.stats.Duels.deaths; const hsduelsdeaths = stats.data.player.stats.Duels.deaths
const hsduelskd = hsduelskills / hsduelsdeaths; const hsduelskd = hsduelskills / hsduelsdeaths
// duels wins // duels wins
const hsduelswins = stats.data.player.stats.Duels.wins; const hsduelswins = stats.data.player.stats.Duels.wins;
// duels wlr // duels wlr
@@ -124,95 +126,79 @@ module.exports = {
const level = getExactLevel(hypixelExp); const level = getExactLevel(hypixelExp);
if (hsbwstars < bwstars || hsbwfkdr < bwfkdr || hsbwwins < bwwins) { if (hsbwstars < bwstars || hsbwfkdr < bwfkdr || hsbwwins < bwwins) {
var bwtitle = "<a:cross_a:1087808606897983539> This player does not meet the BedWars requirements."; var bwtitle =
"<a:cross_a:1087808606897983539> This player does not meet the BedWars requirements.";
} else { } else {
var bwtitle = "<a:check_a:1087808632172847134> This player meets the BedWars requirements."; var bwtitle =
"<a:check_a:1087808632172847134> This player meets the BedWars requirements.";
} }
if (hsswstars < swstars) { if (hsswstars < swstars) {
var swtitle = "<a:cross_a:1087808606897983539> This player does not meet the SkyWars requirements."; var swtitle =
"<a:cross_a:1087808606897983539> This player does not meet the SkyWars requirements.";
} else { } else {
var swtitle = "<a:check_a:1087808632172847134> This player meets the SkyWars requirements."; var swtitle =
"<a:check_a:1087808632172847134> This player meets the SkyWars requirements.";
} }
if (hsduelswins < duelswins || hsduelswlr < duelswlr) { if (hsduelswins < duelswins || hsduelswlr < duelswlr) {
var duelstitle = "<a:cross_a:1087808606897983539> This player does not meet the Duels requirements."; var duelstitle =
"<a:cross_a:1087808606897983539> This player does not meet the Duels requirements.";
} else { } else {
var duelstitle = "<a:check_a:1087808632172847134> This player meets the Duels requirements."; var duelstitle =
"<a:check_a:1087808632172847134> This player meets the Duels requirements.";
} }
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: rank + stats.data.player.displayname + guildTag, title: rank + stats.data.player.displayname + guildTag,
description: description: "**Network Level:** `" +
"**Network Level:** `" + level.toFixed(2).toString() + "`\n" +
level.toFixed(2).toString() + "**Current Guild:** `" + guildName + "`",
"`\n" +
"**Current Guild:** `" +
guildName +
"`",
color: embedColor, color: embedColor,
thumbnail: { url: head }, thumbnail: { url: head },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL(), icon_url: interaction.guild.iconURL()
}, },
fields: [ fields: [
{ {
name: bwtitle, name: bwtitle,
value: value: "**➺ Stars:** `" +
"**➺ Stars:** `" + hsbwstars.toFixed(2).toString() + " / " +
hsbwstars.toFixed(2).toString() + bwstars.toString() + "`\n" +
" / " +
bwstars.toString() +
"`\n" +
"**➺ FKDR:** `" + "**➺ FKDR:** `" +
hsbwfkdr.toFixed(2).toString() + hsbwfkdr.toFixed(2).toString() +
" / " + " / " + bwfkdr.toString() + "`\n" +
bwfkdr.toString() +
"`\n" +
"**➺ Wins:** `" + "**➺ Wins:** `" +
hsbwwins.toString() + hsbwwins.toString() + " / " +
" / " + bwwins.toString() + "`"
bwwins.toString() +
"`",
}, },
{ {
name: swtitle, name: swtitle,
value: value:
"**➺ Stars:** `" + "**➺ Stars:** `" +
hsswstars.toFixed(2).toString() + hsswstars.toFixed(2).toString() +
" / " + " / " + swstars.toString() + "`\n" +
swstars.toString() +
"`\n" +
"**➺ KDR:** `" + "**➺ KDR:** `" +
hsswkd.toFixed(2).toString() + hsswkd.toFixed(2).toString() +
"`\n" + "`\n" +
"**➺ Wins:** `" + "**➺ Wins:** `" +
hsswwins.toString() + hsswwins.toString() + "`"
"`",
}, },
{ {
name: duelstitle, name: duelstitle,
value: value: "**➺ Wins:** `" +
"**➺ Wins:** `" +
hsduelswins.toString() + hsduelswins.toString() +
" / " + " / " + duelswins.toString() + "`\n" +
duelswins.toString() +
"`\n" +
"**➺ WLR:** `" + "**➺ WLR:** `" +
hsduelswlr.toFixed(2).toString() + hsduelswlr.toFixed(2).toString() +
" / " + " / " + duelswlr.toString() + "`\n" +
duelswlr.toString() +
"`\n" +
"**➺ KDR:** `" + "**➺ KDR:** `" +
hsduelskd.toFixed(2).toString() + hsduelskd.toFixed(2).toString() + "`"
"`", }
}, ]
], }]
},
],
}); });
}, }
}; };

View File

@@ -1,10 +1,4 @@
const { const { SlashCommandBuilder, PermissionFlagsBits, ButtonBuilder, ActionRowBuilder, ButtonStyle, } = require("discord.js");
SlashCommandBuilder,
PermissionFlagsBits,
ButtonBuilder,
ActionRowBuilder,
ButtonStyle,
} = require("discord.js");
const { color } = require("../config/options.json"); const { color } = require("../config/options.json");
module.exports = { module.exports = {
@@ -23,8 +17,7 @@ module.exports = {
option option
.setName("channel") .setName("channel")
.setDescription("The channel to send the application to.") .setDescription("The channel to send the application to.")
.setRequired(true), .setRequired(true))
),
) )
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
@@ -34,9 +27,7 @@ module.exports = {
option option
.setName("channel") .setName("channel")
.setDescription("The channel to send the application to.") .setDescription("The channel to send the application to.")
.setRequired(true), .setRequired(true)))
),
)
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
.setName("sendverfiymessage") .setName("sendverfiymessage")
@@ -45,9 +36,7 @@ module.exports = {
option option
.setName("channel") .setName("channel")
.setDescription("The channel to send the verfiy message to.") .setDescription("The channel to send the verfiy message to.")
.setRequired(true), .setRequired(true)))
),
)
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
.setName("sendwaitinglistmessage") .setName("sendwaitinglistmessage")
@@ -56,9 +45,7 @@ module.exports = {
option option
.setName("channel") .setName("channel")
.setDescription("The channel to send the waiting list message to.") .setDescription("The channel to send the waiting list message to.")
.setRequired(true), .setRequired(true)))
),
)
.addSubcommand((subcommand) => .addSubcommand((subcommand) =>
subcommand subcommand
.setName("sendinactivityapplication") .setName("sendinactivityapplication")
@@ -67,9 +54,7 @@ module.exports = {
option option
.setName("channel") .setName("channel")
.setDescription("The channel to send the application to.") .setDescription("The channel to send the application to.")
.setRequired(true), .setRequired(true)))
),
)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
@@ -79,6 +64,7 @@ module.exports = {
const subcommand = interaction.options.getSubcommand(); const subcommand = interaction.options.getSubcommand();
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (subcommand === "sendguildapplication") { if (subcommand === "sendguildapplication") {
const channel = interaction.options.getChannel("channel"); const channel = interaction.options.getChannel("channel");
@@ -90,22 +76,21 @@ module.exports = {
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
iconURL: interaction.guild.iconURL({ dynamic: true }), iconURL: interaction.guild.iconURL({ dynamic: true })
}, },
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }
], ],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder()
new ButtonBuilder() .addComponents(new ButtonBuilder()
.setCustomId("guildapply") .setCustomId("guildapply")
.setLabel("Apply") .setLabel("Apply")
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setEmoji({ name: "✅" }), .setEmoji({ name: "✅" }))
), ]
],
}); });
await interaction.reply({ content: "Message sent", ephemeral: true }); await interaction.reply({ content: "Message sent", ephemeral: true });
} }
@@ -121,22 +106,21 @@ module.exports = {
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
iconURL: interaction.guild.iconURL({ dynamic: true }), iconURL: interaction.guild.iconURL({ dynamic: true })
}, },
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }
], ],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder()
new ButtonBuilder() .addComponents(new ButtonBuilder()
.setCustomId("staffapply") .setCustomId("staffapply")
.setLabel("Apply") .setLabel("Apply")
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setEmoji({ name: "✅" }), .setEmoji({ name: "✅" }))
), ]
],
}); });
await interaction.reply({ content: "Message sent", ephemeral: true }); await interaction.reply({ content: "Message sent", ephemeral: true });
@@ -153,22 +137,21 @@ module.exports = {
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
iconURL: interaction.guild.iconURL({ dynamic: true }), iconURL: interaction.guild.iconURL({ dynamic: true })
}, },
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }
], ],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder()
new ButtonBuilder() .addComponents(new ButtonBuilder()
.setCustomId("guildinactivitylog") .setCustomId("guildinactivitylog")
.setLabel("Submit") .setLabel("Submit")
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setEmoji({ name: "✅" }), .setEmoji({ name: "✅" }))
), ]
],
}); });
await interaction.reply({ content: "Message sent", ephemeral: true }); await interaction.reply({ content: "Message sent", ephemeral: true });
@@ -178,62 +161,59 @@ module.exports = {
const channel = interaction.options.getChannel("channel"); const channel = interaction.options.getChannel("channel");
await channel.send({ await channel.send({
embeds: [ embeds: [{
{
title: "Verification", title: "Verification",
description: "You can verify by clicking the button below.", description: "You can verify by clicking the button below.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
iconURL: interaction.guild.iconURL({ dynamic: true }), iconURL: interaction.guild.iconURL({ dynamic: true })
}, },
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }],
],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder()
new ButtonBuilder() .addComponents(new ButtonBuilder()
.setCustomId("verifybutton") .setCustomId("verifybutton")
.setLabel("Verify") .setLabel("Verify")
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setEmoji({ name: "✅" }), .setEmoji({ name: "✅" }))
), ]
],
}); });
await interaction.reply({ content: "Message sent", ephemeral: true }); await interaction.reply({ content: "Message sent", ephemeral: true });
} }
if (subcommand === "sendwaitinglistmessage") { if (subcommand === "sendwaitinglistmessage") {
const channel = interaction.options.getChannel("channel"); const channel = interaction.options.getChannel("channel");
await channel.send({ await channel.send({
embeds: [ embeds: [{
{
title: "Waiting List", title: "Waiting List",
description: "The people below were accepted into the guild\n" + "Try to invite them in order.", description: "The people below were accepted into the guild\n" +
"Try to invite them in order.",
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
iconURL: interaction.guild.iconURL({ dynamic: true }), iconURL: interaction.guild.iconURL({ dynamic: true })
}, },
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }],
],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder()
new ButtonBuilder() .addComponents(new ButtonBuilder()
.setCustomId("waitinglistupdate") .setCustomId("waitinglistupdate")
.setLabel("Update") .setLabel("Update")
.setStyle(ButtonStyle.Primary) .setStyle(ButtonStyle.Primary)
.setEmoji({ name: "🔄" }), .setEmoji({ name: "🔄" }))
), ]
],
}); });
await interaction.reply({ content: "Message sent", ephemeral: true }); await interaction.reply({ content: "Message sent", ephemeral: true });
} }
},
}
}; };

View File

@@ -1,60 +1,70 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention, EmbedBuilder, ChannelType } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention, EmbedBuilder, ChannelType } = require('discord.js');
const { hypixelGuildID, color } = require("../config/options.json"); const { hypixelGuildID, color } = require('../config/options.json');
const { muted } = require("../config/roles.json"); const { muted } = require('../config/roles.json');
const verify = require("../schemas/verifySchema.js"); const verify = require('../schemas/verifySchema.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const dev = process.env.DEV; const dev = process.env.DEV;
const fetch = require("axios"); const fetch = require('axios');
module.exports = { module.exports = {
name: "admin", name: 'admin',
description: "Admin command.", description: 'Admin command.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("devel") .setName('devel')
.setDescription("Admin command.") .setDescription('Admin command.')
.addSubcommand((subcommand) => subcommand.setName("reload").setDescription("Reload the bot.")) .addSubcommand(subcommand =>
.addSubcommand((subcommand) => subcommand.setName("listallverified").setDescription("List all verified users."))
.addSubcommand((subcommand) =>
subcommand subcommand
.setName("purgereactions") .setName('reload')
.setDescription("Purge all reactions from a messages.") .setDescription('Reload the bot.'))
.addIntegerOption((option) => .addSubcommand(subcommand =>
option.setName("count").setDescription("Count of messages to purge reactions from."), subcommand
), .setName('listallverified')
) .setDescription('List all verified users.'))
.addSubcommand(subcommand =>
subcommand
.setName('purgereactions')
.setDescription('Purge all reactions from a messages.')
.addIntegerOption(option =>
option
.setName('count')
.setDescription('Count of messages to purge reactions from.')))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const subcommand = interaction.options.getSubcommand(); const subcommand = interaction.options.getSubcommand();
const user = interaction.user; const user = interaction.user;
const userMentioned = userMention(user.id); const userMentioned = userMention(user.id);
const guild = interaction.guild; const guild = interaction.guild;
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (subcommand === "reload") { if (subcommand === 'reload') {
const { exec } = require("child_process");
await interaction.reply({ content: "Reloading...", ephemeral: true });
exec("pm2 restart 0", async (err, stdout, stderr) => { const { exec } = require('child_process');
await interaction.reply({ content: 'Reloading...', ephemeral: true })
exec('pm2 restart 0', async (err, stdout, stderr) => {
if (err) { if (err) {
await interaction.reply({ content: "Error while reloading: " + err, ephemeral: true }); await interaction.reply({ content: 'Error while reloading: ' + err, ephemeral: true })
} }
}); })
} }
if (subcommand === "listallverified") { if (subcommand === 'listallverified') {
const verifiedUsers = await verify.find();
const mojang = "https://api.mojang.com/user/profile/"; const verifiedUsers = await verify.find()
const mojang = "https://api.mojang.com/user/profile/"
let embed = new EmbedBuilder() let embed = new EmbedBuilder()
.setTitle(guild.name) .setTitle(guild.name)
.setColor(embedColor) .setColor(embedColor)
.setDescription("List of all verified users"); .setDescription('List of all verified users')
for (let i = 0; i < verifiedUsers.length; i++) { for (let i = 0; i < verifiedUsers.length; i++) {
const user = verifiedUsers[i]; const user = verifiedUsers[i];
const userCheck = await fetch(mojang + user.uuid); const userCheck = await fetch(mojang + user.uuid);
@@ -64,34 +74,34 @@ module.exports = {
embed.addFields({ embed.addFields({
name: "**IGN:** " + ign, name: "**IGN:** " + ign,
value: "**Discord:** " + mentionedUser, value: "**Discord:** " + mentionedUser
}); })
} }
await interaction.reply({ await interaction.reply({
embeds: [embed], embeds: [embed]
}); })
} }
if (subcommand === "purgereactions") { if (subcommand === 'purgereactions') {
const count = interaction.options.getInteger("count");
await interaction.deferReply({}); const count = interaction.options.getInteger('count');
await interaction.deferReply({})
if (user.id !== dev) { if (user.id !== dev) {
interaction.editReply({ interaction.editReply({ content: 'Due to you not screwing something up this command is restricted to only ' + userMentioned, ephemeral: true })
content: "Due to you not screwing something up this command is restricted to only " + userMentioned, return
ephemeral: true,
});
return;
} }
const messages = await interaction.channel.messages.fetch({ limit: count }); const messages = await interaction.channel.messages.fetch({ limit: count });
messages.forEach(async (message) => { messages.forEach(async (message) => {
await message.reactions.removeAll(); await message.reactions.removeAll();
}); })
await interaction.editReply(`Purged reactions from ${count} message(s).`)
await interaction.editReply(`Purged reactions from ${count} message(s).`);
} }
}, }
}; };

View File

@@ -1,67 +1,55 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require("../config/options.json");
const verify = require("../schemas/verifySchema.js"); const verify = require("../schemas/verifySchema.js");
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const { const { gm, manager, moderator, beast, member, trialmember, guildRole, guildStaff, defaultMember } = require("../config/roles.json");
gm, const removeThese = [ gm, manager, moderator, beast, member, trialmember, guildRole, guildStaff, defaultMember ]
manager,
moderator,
beast,
member,
trialmember,
guildRole,
guildStaff,
defaultMember,
} = require("../config/roles.json");
const removeThese = [gm, manager, moderator, beast, member, trialmember, guildRole, guildStaff, defaultMember];
module.exports = { module.exports = {
name: "forceunverify", name: "forceunverify",
description: "Force unverify a user", description: "Force unverify a user",
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("forceunverify") .setName('forceunverify')
.setDescription("Force unverify a user") .setDescription('Force unverify a user')
.addUserOption((option) => .addUserOption(option =>
option.setName("user").setDescription("The user to force unverify").setRequired(true), option
) .setName('user')
.setDescription('The user to force unverify')
.setRequired(true))
.setDMPermission(false) .setDMPermission(false)
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator), .setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
async execute(interaction) { async execute(interaction) {
const member1 = interaction.options.getUser("user"); const member1 = interaction.options.getUser('user');
const member = interaction.guild.members.cache.get(member1.id); const member = interaction.guild.members.cache.get(member1.id)
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace('#', '0x'))
const verifiedUser = await verify.findOne({ userID: member1.id }); const verifiedUser = await verify.findOne({ userID: member1.id })
const user = interaction.user; const user = interaction.user
if (!verifiedUser) { if (!verifiedUser) {
return interaction.reply({ return interaction.reply({
embeds: [ embeds: [{
{
description: "This user is not verified", description: "This user is not verified",
color: embedColor, color: embedColor,
}, }]
], })
});
} }
await verify.findOneAndDelete({ userID: member1.id }); await verify.findOneAndDelete({ userID: member1.id })
await member.roles.remove(removeThese); await member.roles.remove(removeThese)
await interaction.reply({ await interaction.reply({
embeds: [ embeds: [{
{
description: "Successfully unverified" + userMention(member1.id), description: "Successfully unverified" + userMention(member1.id),
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by taken.lua", text: interaction.guild.name + " | Developed by taken.lua",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); }
}, }
};

View File

@@ -1,41 +1,35 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const hypixelAPIKey = process.env.HYPIXELAPIKEY; const hypixelAPIKey = process.env.HYPIXELAPIKEY;
const { hypixelGuildID, color } = require("../config/options.json"); const { hypixelGuildID, color } = require('../config/options.json');
const { const { gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff, defaultMember } = require('../config/roles.json');
gm, const verify = require('../schemas/verifySchema.js')
manager, const fetch = require('axios');
moderator, const removeThese = [gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff]
beast,
elite,
member,
trialmember,
guildRole,
guildStaff,
defaultMember,
} = require("../config/roles.json");
const verify = require("../schemas/verifySchema.js");
const fetch = require("axios");
const removeThese = [gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff];
module.exports = { module.exports = {
name: "forceupdate", name: 'forceupdate',
description: "Force update the user", description: 'Force update the user',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("forceupdate") .setName('forceupdate')
.setDescription("Force update the user") .setDescription('Force update the user')
.addUserOption((option) => option.setName("user").setDescription("The user to force update").setRequired(true)) .addUserOption(option =>
option
.setName('user')
.setDescription('The user to force update')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user = interaction.options.getUser("user"); const user = interaction.options.getUser('user');
const usermentioned = userMention(user.id); const usermentioned = userMention(user.id);
const verifyData = await verify.findOne({ userID: user.id }); const verifyData = await verify.findOne({ userID: user.id })
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const user1 = interaction.guild.members.cache.get(user.id); const user1 = interaction.guild.members.cache.get(user.id);
@@ -43,25 +37,23 @@ module.exports = {
if (!verifyData) { if (!verifyData) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "You are not verified. Please run `/verify` to verify yourself", description: "You are not verified. Please run `/verify` to verify yourself",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
const mojangAPI = "https://api.mojang.com/user/profile/"; const mojangAPI = "https://api.mojang.com/user/profile/"
const guildlAPI = "https://api.hypixel.net/guild"; const guildlAPI = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const guild = guildlAPI + "?key=" + hypixelAPIKey + "&player=" + verifyData.uuid; const guild = guildlAPI + "?key=" + hypixelAPIKey + "&player=" + verifyData.uuid;
const userCheck = await fetch(mojangAPI + verifyData.uuid); const userCheck = await fetch(mojangAPI + verifyData.uuid);
@@ -69,227 +61,228 @@ module.exports = {
const head = minotar + userCheck.data.name; const head = minotar + userCheck.data.name;
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var responseGuildID = null; var responseGuildID = null
} else { } else {
var responseGuildID = guildCheck.data.guild._id; var responseGuildID = guildCheck.data.guild._id
} }
if (responseGuildID !== hypixelGuildID) { if (responseGuildID !== hypixelGuildID) {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + " was given the the Default Member role.", description: usermentioned + " was given the the Default Member role.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); await roleManage.add(defaultMember)
await roleManage.add(defaultMember); return
return;
} }
if (responseGuildID === hypixelGuildID) { if (responseGuildID === hypixelGuildID) {
const GuildMembers = guildCheck.data.guild.members;
const guildRank = GuildMembers.find((member) => member.uuid === verifyData.uuid).rank;
if (guildRank === "Guild Master") { const GuildMembers = guildCheck.data.guild.members;
const guildRank = GuildMembers.find(member => member.uuid === verifyData.uuid).rank;
if (guildRank === 'Guild Master') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(guildStaff, "User was force updated."); await roleManage.add(guildStaff, "User was force updated.")
await roleManage.add(gm, "User was force updated."); await roleManage.add(gm, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Guild Master`", description: usermentioned + "'s rank has been updated to `Guild Master`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Manager") { if (guildRank === 'Manager') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(guildStaff, "User was force updated."); await roleManage.add(guildStaff, "User was force updated.")
await roleManage.add(manager, "User was force updated."); await roleManage.add(manager, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Manager`", description: usermentioned + "'s rank has been updated to `Manager`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Moderator") { if (guildRank === 'Moderator') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(guildStaff, "User was force updated."); await roleManage.add(guildStaff, "User was force updated.")
await roleManage.add(moderator, "User was force updated."); await roleManage.add(moderator, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Moderator`", description: usermentioned + "'s rank has been updated to `Moderator`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Beast") { if (guildRank === 'Beast') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(beast, "User was force updated."); await roleManage.add(beast, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Beast`.", description: usermentioned + "'s rank has been updated to `Beast`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Elite") { if (guildRank === 'Elite') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(elite, "User was force updated."); await roleManage.add(elite, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Elite`.", description: usermentioned + "'s rank has been updated to `Elite`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Member") { if (guildRank === 'Member') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(member, "User was force updated."); await roleManage.add(member, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Member`.", description: usermentioned + "'s rank has been updated to `Member`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Trial Member") { if (guildRank === 'Trial Member') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Force Update)")
} }
await roleManage.add(guildRole, "User was force updated."); await roleManage.add(guildRole, "User was force updated.")
await roleManage.add(trialmember, "User was force updated."); await roleManage.add(trialmember, "User was force updated.")
await roleManage.add(defaultMember, "User was force updated."); await roleManage.add(defaultMember, "User was force updated.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: usermentioned + "'s rank has been updated to `Trial Member`.", description: usermentioned + "'s rank has been updated to `Trial Member`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
} }
}, }
}; }

View File

@@ -1,161 +1,153 @@
const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const hypixelApiKey = process.env.HYPIXELAPIKEY; const hypixelApiKey = process.env.HYPIXELAPIKEY;
const fetch = require("axios"); const fetch = require('axios');
const { color, hypixelGuildID } = require("../config/options.json"); const { color, hypixelGuildID } = require('../config/options.json');
const verify = require("../schemas/verifySchema.js"); const verify = require('../schemas/verifySchema.js')
const { mongoose } = require("mongoose"); const {mongoose} = require('mongoose');
const { const { gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff, defaultMember } = require('../config/roles.json');
gm,
manager,
moderator,
beast,
elite,
member,
trialmember,
guildRole,
guildStaff,
defaultMember,
} = require("../config/roles.json");
module.exports = { module.exports = {
name: "forceverify", name: 'forceverify',
description: "Force verify a user.", description: 'Force verify a user.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("forceverify") .setName('forceverify')
.setDescription("Force verify a user.") .setDescription('Force verify a user.')
.addUserOption((option) => option.setName("user").setDescription("The user to force verify.")) .addUserOption(option =>
.addStringOption((option) => option.setName("ign").setDescription("The user's in-game name.")) option
.setName('user')
.setDescription('The user to force verify.'))
.addStringOption(option =>
option
.setName('ign')
.setDescription('The user\'s in-game name.'))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user1 = interaction.options.getUser("user"); const user1 = interaction.options.getUser('user');
const user = interaction.guild.members.cache.get(user1.id); const user = interaction.guild.members.cache.get(user1.id);
const ign = interaction.options.getString("ign"); const ign = interaction.options.getString('ign');
const mod = interaction.user; const mod = interaction.user
// const slothPixel = "https://api.slothpixel.me/api/players/"; // const slothPixel = "https://api.slothpixel.me/api/players/";
// const guildAPI = "https://api.slothpixel.me/api/guilds/" // const guildAPI = "https://api.slothpixel.me/api/guilds/"
const mojang = "https://api.mojang.com/users/profiles/minecraft/"; const mojang = "https://api.mojang.com/users/profiles/minecraft/"
const hypixelApi = "https://api.hypixel.net/player"; const hypixelApi = "https://api.hypixel.net/player"
const guildApi = "https://api.hypixel.net/guild"; const guildApi = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (!user) { if (!user) {
interaction.editReply( interaction.editReply('Please provide a user to force verify.\nThis can also mean the user is not in the server.')
"Please provide a user to force verify.\nThis can also mean the user is not in the server.", return
);
return;
} }
const verifyData = await verify.findOne({ userID: user.id }); const verifyData = await verify.findOne({ userID: user.id })
if (verifyData) { if (verifyData) {
interaction.editReply("That user is already verified."); interaction.editReply('That user is already verified.')
return; return
} }
if (!ign) { if (!ign) {
interaction.editReply("Please provide a player's IGN."); interaction.editReply('Please provide a player\'s IGN.')
return; return
} }
if (user1.discriminator == "0") { if (user1.discriminator == "0") {
var username = user1.username; var username = user1.username
} else { } else {
var username = user1.username + "#" + user1.discriminator; var username = user1.username + "#" + user1.discriminator
} }
if (mod.discriminator == "0") { if (mod.discriminator == "0") {
var modName = mod.username; var modName = mod.username
} else { } else {
var modName = mod.username + "#" + mod.discriminator; var modName = mod.username + "#" + mod.discriminator
} }
try { try {
await fetch(mojang + ign); await fetch(mojang + ign);
} catch (err) { } catch (err) {
interaction.editReply("That player doesn't exist. [Mojang]"); interaction.editReply('That player doesn\'t exist. [Mojang]')
return; return
} }
const userCheck = await fetch(mojang + ign); const userCheck = await fetch(mojang + ign);
const userUUID = userCheck.data.id; const userUUID = userCheck.data.id;
const player = hypixelApi + "?key=" + hypixelApiKey + "&uuid=" + userUUID; const player = hypixelApi + "?key=" + hypixelApiKey + "&uuid=" + userUUID
const guild = guildApi + "?key=" + hypixelApiKey + "&player=" + userUUID; const guild = guildApi + "?key=" + hypixelApiKey + "&player=" + userUUID
const head = minotar + ign; const head = minotar + ign;
const hypixelCheck = await fetch(player); const hypixelCheck = await fetch(player);
if (!hypixelCheck.data.player) { if (!hypixelCheck.data.player) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{ description: "<a:questionmark_pink:1130206038008803488> That player hasn't played Hypixel before.",
description: color: embedColor
"<a:questionmark_pink:1130206038008803488> That player hasn't played Hypixel before.", }]
color: embedColor,
},
],
}); });
return; return;
} }
const guildCheck = await fetch(guild); const guildCheck = await fetch(guild)
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var responseGuildID = null; var responseGuildID = null
} else { } else {
var responseGuildID = guildCheck.data.guild._id; var responseGuildID = guildCheck.data.guild._id
} }
if (responseGuildID === hypixelGuildID) { if (responseGuildID === hypixelGuildID) {
const GuildMembers = guildCheck.data.guild.members; const GuildMembers = guildCheck.data.guild.members;
const guildRank = GuildMembers.find((member) => member.uuid === hypixelCheck.data.player.uuid).rank; const guildRank = GuildMembers.find(member => member.uuid === hypixelCheck.data.player.uuid).rank;
if (guildRank === "Guild Master") { if (guildRank === "Guild Master") {
await user.roles.add(gm, "User was force verified by " + modName); await user.roles.add(gm, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
await user.roles.add(guildStaff, "User was force verified by " + modName); await user.roles.add(guildStaff, "User was force verified by " + modName)
} }
if (guildRank === "Manager") { if (guildRank === "Manager") {
await user.roles.add(manager, "User was force verified by " + modName); await user.roles.add(manager, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
await user.roles.add(guildStaff, "User was force verified by " + modName); await user.roles.add(guildStaff, "User was force verified by " + modName)
} }
if (guildRank === "Moderator") { if (guildRank === "Moderator") {
await user.roles.add(moderator, "User was force verified by " + modName); await user.roles.add(moderator, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
await user.roles.add(guildStaff, "User was force verified by " + modName); await user.roles.add(guildStaff, "User was force verified by " + modName)
} }
if (guildRank === "Beast") { if (guildRank === "Beast") {
await user.roles.add(beast, "User was force verified by " + modName); await user.roles.add(beast, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
} }
if (guildRank === "Elite") { if (guildRank === "Elite") {
await user.roles.add(elite, "User was force verified by " + modName); await user.roles.add(elite, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
} }
if (guildRank === "Member") { if (guildRank === "Member") {
await user.roles.add(member, "User was force verified by " + modName); await user.roles.add(member, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
} }
if (guildRank === "Trial Member") { if (guildRank === "Trial Member") {
await user.roles.add(trialmember, "User was force verified by " + modName); await user.roles.add(trialmember, "User was force verified by " + modName);
await user.roles.add(guildRole, "User was force verified by " + modName); await user.roles.add(guildRole, "User was force verified by " + modName)
} }
} }
@@ -164,31 +156,25 @@ module.exports = {
const newVerify = new verify({ const newVerify = new verify({
_id: new mongoose.Types.ObjectId(), _id: new mongoose.Types.ObjectId(),
userID: user.id, userID: user.id,
uuid: userUUID, uuid: userUUID
}); })
await newVerify.save(); await newVerify.save();
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: interaction.guild.name, title: interaction.guild.name,
description: description: "You have successfully force verified `" + username + "` with the account `" + hypixelCheck.data.player.displayname + "`.",
"You have successfully force verified `" +
username +
"` with the account `" +
hypixelCheck.data.player.displayname +
"`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
icon_url: interaction.guild.iconURL(), icon_url: interaction.guild.iconURL(),
text: interaction.guild.name + " | Developed by Taken#0002", text: interaction.guild.name + " | Developed by Taken#0002"
}, }
}, }]
],
}); });
},
}
}; };

View File

@@ -1,51 +1,54 @@
const { SlashCommandBuilder, ChannelType } = require("discord.js"); const { SlashCommandBuilder, ChannelType } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
module.exports = { module.exports = {
name: "help", name: 'help',
description: "Help command", description: 'Help command',
type: "slash", type: 'slash',
data: new SlashCommandBuilder().setName("help").setDescription("Help command").setDMPermission(true), data: new SlashCommandBuilder()
.setName('help')
.setDescription('Help command')
.setDMPermission(true),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace('#', '0x'));
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{ title: 'Commands',
title: "Commands",
description: "List of commands", description: "List of commands",
fields: [ fields: [
{ {
name: "/check", name: '/check',
value: "Check the stats of a player", value: 'Check the stats of a player'
}, },
{ {
name: "/reqs", name: '/reqs',
value: "Check the requirements of the guild", value: 'Check the requirements of the guild'
}, },
{ {
name: "/update", name: '/update',
value: "Update's your roles", value: 'Update\'s your roles'
}, },
{ {
name: "/help", name: '/help',
value: "Shows this message", value: 'Shows this message'
}, }
], ],
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, },
footer: { footer: {
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true }),
text: interaction.guild.name + " | Developed by: @Taken#0001", text: interaction.guild.name + ' | Developed by: @Taken#0001'
}, }
}, }]
],
}); });
},
}
}; };

View File

@@ -1,54 +1,51 @@
const { SlashCommandBuilder } = require("discord.js"); const { SlashCommandBuilder } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
const { bwfkdr, bwstars, bwwins, swstars, duelswins, duelswlr } = require("../config/reqs.json"); const { bwfkdr, bwstars, bwwins, swstars, duelswins, duelswlr } = require('../config/reqs.json');
module.exports = { module.exports = {
name: "reqs", name: 'reqs',
description: "Displays the requirements for the guild.", description: 'Displays the requirements for the guild.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder().setName("reqs").setDescription("Displays the requirements for the guild."), data: new SlashCommandBuilder()
.setName('reqs')
.setDescription('Displays the requirements for the guild.'),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{ title: 'Requirements',
title: "Requirements", description: '**You must make 100k-150k weekly GEXP.\nAs well as onne of the game stats below**',
description: "**You must make 100k-150k weekly GEXP.\nAs well as onne of the game stats below**",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: interaction.guild.iconURL(), url: interaction.guild.iconURL()
}, },
fields: [ fields: [
{ {
name: "**Bedwars**", name: '**Bedwars**',
value: value: '**Stars:** `' + bwstars.toString() +
"**Stars:** `" + '`\n**Wins:** `' + bwwins.toString() +
bwstars.toString() + '`\n**FKDR:** `' + bwfkdr.toString() + '`'
"`\n**Wins:** `" +
bwwins.toString() +
"`\n**FKDR:** `" +
bwfkdr.toString() +
"`",
}, },
{ {
name: "**Skywars**", name: '**Skywars**',
value: "**Stars:** `" + swstars.toString() + "`", value: '**Stars:** `' + swstars.toString() + '`'
}, },
{ {
name: "**Duels**", name: '**Duels**',
value: "**Wins:** `" + duelswins.toString() + "`\n**WLR:** `" + duelswlr.toString() + "`", value: '**Wins:** `' + duelswins.toString() +
}, '`\n**WLR:** `' + duelswlr.toString() + '`'
}
], ],
footer: { footer: {
text: interaction.guild.name + " | Developed by: @Taken#0002", text: interaction.guild.name + ' | Developed by: @Taken#0002',
icon_url: interaction.guild.iconURL(), icon_url: interaction.guild.iconURL()
}, }
}, }]
], })
}); }
}, }
};

View File

@@ -1,34 +1,41 @@
const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
module.exports = { module.exports = {
name: "send", name: 'send',
description: "Send a message to a channel.", description: 'Send a message to a channel.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("send") .setName('send')
.setDescription("Send a message to a channel.") .setDescription('Send a message to a channel.')
.addStringOption((option) => option.setName("message").setDescription("The message to send.")) .addStringOption(option =>
.addChannelOption((option) => option.setName("channel").setDescription("The channel to send the message to.")) option
.setName('message')
.setDescription('The message to send.'))
.addChannelOption(option =>
option
.setName('channel')
.setDescription('The channel to send the message to.'))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
const message = interaction.options.getString("message"); const message = interaction.options.getString('message');
const channel = interaction.options.getChannel("channel"); const channel = interaction.options.getChannel('channel');
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (!message) { if (!message) {
interaction.editReply({ content: "Please provide a message to send.", ephemeral: true }); interaction.editReply({ content: 'Please provide a message to send.', ephemeral: true })
return; return
} }
if (!channel) { if (!channel) {
interaction.editReply({ content: "Please provide a channel to send the message to.", ephemeral: true }); interaction.editReply({ content: 'Please provide a channel to send the message to.', ephemeral: true })
return; return
} }
channel.send({ channel.send({
@@ -38,13 +45,13 @@ module.exports = {
description: message, description: message,
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: interaction.guild.iconURL({ dynamic: true }), url: interaction.guild.iconURL({ dynamic: true })
}, },
footer: { footer: {
text: "Developed by @Taken#0002", text: "Developed by @Taken#0002"
}, }
}, }
], ]
}); });
}, }
}; };

View File

@@ -1,34 +1,39 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js')
module.exports = { module.exports = {
name: "setnick", name: 'setnick',
description: "Set your nickname", description: 'Set your nickname',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("setnick") .setName('setnick')
.setDescription("Set your nickname") .setDescription('Set your nickname')
.addUserOption((option) => .addUserOption(option =>
option.setName("user").setDescription("The user to set the nickname for").setRequired(true), option
) .setName('user')
.addStringOption((option) => option.setName("nickname").setDescription("The nickname to set").setRequired(true)) .setDescription('The user to set the nickname for')
.setRequired(true))
.addStringOption(option =>
option
.setName('nickname')
.setDescription('The nickname to set')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.ManageNicknames) .setDefaultMemberPermissions(PermissionFlagsBits.ManageNicknames)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const user = interaction.options.getUser("user");
const nickname = interaction.options.getString("nickname"); const user = interaction.options.getUser('user');
const nickname = interaction.options.getString('nickname');
const member = await interaction.guild.members.fetch(user.id); const member = await interaction.guild.members.fetch(user.id);
if (!member.manageable) { if (!member.manageable) {
return interaction.reply({ content: "I cannot set the nickname for this user!", ephemeral: true }); return interaction.reply({ content: 'I cannot set the nickname for this user!', ephemeral: true });
} }
await member.setNickname(nickname, `Set by ${interaction.user.tag}`); await member.setNickname(nickname, `Set by ${interaction.user.tag}`);
await interaction.reply({ await interaction.reply({ content: "Set the nickname of " + userMention(member.id) + " to " + nickname, ephemeral: true });
content: "Set the nickname of " + userMention(member.id) + " to " + nickname,
ephemeral: true, }
}); }
},
};

View File

@@ -1,57 +1,59 @@
const { SlashCommandBuilder, PermissionFlagsBits } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
module.exports = { module.exports = {
name: "slowmode", name: 'slowmode',
description: "Set the slowmode of a channel.", description: 'Set the slowmode of a channel.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("slowmode") .setName('slowmode')
.setDescription("Set the slowmode of a channel.") .setDescription('Set the slowmode of a channel.')
.addIntegerOption((option) => .addIntegerOption(option =>
option.setName("seconds").setDescription("The amount of seconds to set the slowmode to."), option
) .setName('seconds')
.addChannelOption((option) => option.setName("channel").setDescription("The channel to set the slowmode of.")) .setDescription('The amount of seconds to set the slowmode to.'))
.addChannelOption(option =>
option
.setName('channel')
.setDescription('The channel to set the slowmode of.'))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephermeral: true }); await interaction.deferReply({ ephermeral: true });
const seconds = interaction.options.getInteger("seconds") ?? 5; const seconds = interaction.options.getInteger('seconds') ?? 5
const channel = interaction.options.getChannel("channel") ?? interaction.channel; const channel = interaction.options.getChannel('channel') ?? interaction.channel
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (seconds > 21600) { if (seconds > 21600) {
await channel.setRateLimitPerUser(21600); await channel.setRateLimitPerUser(21600)
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: `Set the slowmode of ${channel} to 21600 seconds.`, description: `Set the slowmode of ${channel} to 21600 seconds.`,
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by: @Taken#0001", text: interaction.guild.name + " | Developed by: @Taken#0001",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: `Set the slowmode of ${channel} to ${seconds} seconds.`, description: `Set the slowmode of ${channel} to ${seconds} seconds.`,
color: embedColor, color: embedColor,
footer: { footer: {
text: interaction.guild.name + " | Developed by: @Taken#0001", text: interaction.guild.name + " | Developed by: @Taken#0001",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); await channel.setRateLimitPerUser(seconds)
await channel.setRateLimitPerUser(seconds);
}, }
}; }

View File

@@ -1,289 +1,281 @@
const { SlashCommandBuilder } = require("discord.js"); const { SlashCommandBuilder } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const hypixelApiKey = process.env.HYPIXELAPIKEY; const hypixelApiKey = process.env.HYPIXELAPIKEY;
const fetch = require("axios"); const fetch = require('axios');
const verify = require("../schemas/verifySchema.js"); const verify = require('../schemas/verifySchema.js')
const { color, hypixelGuildID } = require("../config/options.json"); const { color, hypixelGuildID } = require('../config/options.json');
const { const { gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff, defaultMember } = require('../config/roles.json');
gm,
manager,
moderator,
beast,
elite,
member,
trialmember,
guildRole,
guildStaff,
defaultMember,
} = require("../config/roles.json");
const removeThese = [gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff]; const removeThese = [gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff];
module.exports = { module.exports = {
name: "update", name: 'update',
description: "Update your guild rank.", description: 'Update your guild rank.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder().setName("update").setDescription("Update your guild rank.").setDMPermission(false), data: new SlashCommandBuilder()
.setName('update')
.setDescription('Update your guild rank.')
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user1 = interaction.user; const user1 = interaction.user;
const user = interaction.guild.members.cache.get(user1.id); const user = interaction.guild.members.cache.get(user1.id);
const verifyData = await verify.findOne({ userID: user.id }); const verifyData = await verify.findOne({ userID: user.id })
const roleManage = user.roles; const roleManage = user.roles;
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
if (!verifyData) { if (!verifyData) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "You are not verified. Please run `/verify` to verify yourself", description: "You are not verified. Please run `/verify` to verify yourself",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
const mojangAPI = "https://api.mojang.com/user/profile/"; const mojangAPI = "https://api.mojang.com/user/profile/"
const guildAPI = "https://api.hypixel.net/guild"; const guildAPI = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const userCheck = await fetch(mojangAPI + verifyData.uuid); const userCheck = await fetch(mojangAPI + verifyData.uuid);
const head = minotar + userCheck.data.name; const head = minotar + userCheck.data.name;
const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + verifyData.uuid; const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + verifyData.uuid
const guildCheck = await fetch(guild); const guildCheck = await fetch(guild);
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var guildID = null; var guildID = null
} else { } else {
var guildID = guildCheck.data.guild._id; var guildID = guildCheck.data.guild._id
} }
if (guildID !== hypixelGuildID) { if (guildID !== hypixelGuildID) {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Updated your roles to `Default Member`", description: "Updated your roles to `Default Member`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildID === hypixelGuildID) { if (guildID === hypixelGuildID) {
const GuildMembers = guildCheck.data.guild.members;
const guildRank = GuildMembers.find((member) => member.uuid === verifyData.uuid).rank;
if (guildRank === "Guild Master") { const GuildMembers = guildCheck.data.guild.members;
const guildRank = GuildMembers.find(member => member.uuid === verifyData.uuid).rank;
if (guildRank === 'Guild Master') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(guildStaff, "User used the update command"); await roleManage.add(guildStaff, "User used the update command")
await roleManage.add(gm, "User used the update command"); await roleManage.add(gm, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Guild Master`", description: "Your rank has been updated to `Guild Master`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Manager") { if (guildRank === 'Manager') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(guildStaff, "User used the update command"); await roleManage.add(guildStaff, "User used the update command")
await roleManage.add(manager, "User used the update command"); await roleManage.add(manager, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Manager`", description: "Your rank has been updated to `Manager`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Moderator") { if (guildRank === 'Moderator') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(guildStaff, "User used the update command"); await roleManage.add(guildStaff, "User used the update command")
await roleManage.add(moderator, "User used the update command"); await roleManage.add(moderator, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Moderator`", description: "Your rank has been updated to `Moderator`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
} }
if (guildRank === "Beast") { if (guildRank === 'Beast') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(beast, "User used the update command"); await roleManage.add(beast, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Beast`.", description: "Your rank has been updated to `Beast`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Elite") { if (guildRank === 'Elite') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(elite, "User used the update command"); await roleManage.add(elite, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Elite`.", description: "Your rank has been updated to `Elite`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Member") { if (guildRank === 'Member') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(member, "User used the update command"); await roleManage.add(member, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Member`.", description: "Your rank has been updated to `Member`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return;
} }
if (guildRank === "Trial Member") { if (guildRank === 'Trial Member') {
for (let i = 0; i < removeThese.length; i++) { for (let i = 0; i < removeThese.length; i++) {
await roleManage.remove(removeThese[i], "Auto role removal. (Update)"); await roleManage.remove(removeThese[i], "Auto role removal. (Update)")
} }
await roleManage.add(guildRole, "User used the update command"); await roleManage.add(guildRole, "User used the update command")
await roleManage.add(trialmember, "User used the update command"); await roleManage.add(trialmember, "User used the update command")
await roleManage.add(defaultMember, "User used the update command"); await roleManage.add(defaultMember, "User used the update command")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
description: "Your rank has been updated to `Trial Member`.", description: "Your rank has been updated to `Trial Member`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
}); return
return; }
} }
} }
},
}; };

View File

@@ -5,18 +5,7 @@ const fetch = require("axios");
const { color, hypixelGuildID } = require("../config/options.json"); const { color, hypixelGuildID } = require("../config/options.json");
const verify = require("../schemas/verifySchema.js"); const verify = require("../schemas/verifySchema.js");
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const { const { gm, manager, moderator, beast, elite, member, trialmember, guildRole, guildStaff, defaultMember } = require("../config/roles.json");
gm,
manager,
moderator,
beast,
elite,
member,
trialmember,
guildRole,
guildStaff,
defaultMember,
} = require("../config/roles.json");
module.exports = { module.exports = {
name: "verify", name: "verify",
@@ -26,18 +15,21 @@ module.exports = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("verify") .setName("verify")
.setDescription("Verify yourself as a member of the server.") .setDescription("Verify yourself as a member of the server.")
.addStringOption((option) => option.setName("ign").setDescription("Your in-game name.")) .addStringOption((option) =>
option
.setName("ign")
.setDescription("Your in-game name."))
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user1 = interaction.user; const user1 = interaction.user
const user = interaction.guild.members.cache.get(user1.id); const user = interaction.guild.members.cache.get(user1.id);
const ign = interaction.options.getString("ign"); const ign = interaction.options.getString("ign");
const mojang = "https://api.mojang.com/users/profiles/minecraft/"; const mojang = "https://api.mojang.com/users/profiles/minecraft/";
const hypixel = "https://api.hypixel.net/player"; const hypixel = "https://api.hypixel.net/player"
const guildAPI = "https://api.hypixel.net/guild"; const guildAPI = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const head = minotar + ign; const head = minotar + ign;
@@ -45,19 +37,17 @@ module.exports = {
const verifyData = await verify.findOne({ userID: user.id }); const verifyData = await verify.findOne({ userID: user.id });
if (verifyData) { if (verifyData) {
interaction.editReply("You are already verified.\n" + "Try running /update to update your roles."); interaction.editReply("You are already verified.\n" + "Try running /update to update your roles.")
return; return;
} }
if (!ign) { if (!ign) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{
description: "<a:cross_a:1087808606897983539> Please provide your in-game name.", description: "<a:cross_a:1087808606897983539> Please provide your in-game name.",
color: embedColor, color: embedColor
}, }]
], })
});
return; return;
} }
@@ -65,12 +55,10 @@ module.exports = {
await fetch(mojang + ign); await fetch(mojang + ign);
} catch (err) { } catch (err) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{
description: "<a:questionmark_pink:1130206038008803488> That player does not exist.", description: "<a:questionmark_pink:1130206038008803488> That player does not exist.",
color: embedColor, color: embedColor
}, }]
],
}); });
return; return;
} }
@@ -78,79 +66,64 @@ module.exports = {
const userCheck = await fetch(mojang + ign); const userCheck = await fetch(mojang + ign);
const userUUID = userCheck.data.id; const userUUID = userCheck.data.id;
const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + userUUID; const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + userUUID
const stats = await fetch(player); const stats = await fetch(player);
if (!stats.data.player) { if (!stats.data.player) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{ description: "<a:questionmark_pink:1130206038008803488> That player hasn't played Hypixel before.",
description: color: embedColor
"<a:questionmark_pink:1130206038008803488> That player hasn't played Hypixel before.", }]
color: embedColor,
},
],
}); });
return; return;
} }
if (user1.discriminator === "0") { if (user1.discriminator === "0") {
var username = user1.username; var username = user1.username
} else { } else {
var username = user1.username + "#" + user1.discriminator; var username = user1.username + "#" + user1.discriminator
} }
if (!stats.data.player.socialMedia.links.DISCORD) { if (!stats.data.player.socialMedia.links.DISCORD) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [
{ {
description: description: "<a:cross_a:1087808606897983539> There is no Discord account linked to `" + stats.data.player.displayname + "`.\n\n" +
"<a:cross_a:1087808606897983539> There is no Discord account linked to `" + "**Please set your Discord tag on hypixel to `" + username + "` and try again.**",
stats.data.player.displayname + color: embedColor
"`.\n\n" + }
"**Please set your Discord tag on hypixel to `" + ]
username +
"` and try again.**",
color: embedColor,
},
],
}); });
return; return;
} }
const linkedDiscord = stats.data.player.socialMedia.links.DISCORD; const linkedDiscord = stats.data.player.socialMedia.links.DISCORD
if (linkedDiscord !== username) { if (linkedDiscord !== username) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [
{ {
description: description: "<a:cross_a:1087808606897983539> The Discord account linked to `" + stats.data.player.displayname + "` is currently `" + linkedDiscord + "`\n\n" +
"<a:cross_a:1087808606897983539> The Discord account linked to `" + "**Please set your Discord tag on hypixel to `" + username + "` and try again.**",
stats.data.player.displayname + color: embedColor
"` is currently `" + }
linkedDiscord + ]
"`\n\n" +
"**Please set your Discord tag on hypixel to `" +
username +
"` and try again.**",
color: embedColor,
},
],
}); });
return; return;
} }
const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + userUUID; const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + userUUID
const guildCheck = await fetch(guild); const guildCheck = await fetch(guild);
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var guildID = null; var guildID = null
} else { } else {
var guildID = guildCheck.data.guild._id; var guildID = guildCheck.data.guild._id
} }
if (guildID === hypixelGuildID) { if (guildID === hypixelGuildID) {
const GuildMembers = guildCheck.data.guild.members; const GuildMembers = guildCheck.data.guild.members
const guildRank = GuildMembers.find((member) => member.uuid === stats.data.player.uuid).rank; const guildRank = GuildMembers.find((member) => member.uuid === stats.data.player.uuid).rank;
if (guildRank === "Guild Master" && guildID === hypixelGuildID) { if (guildRank === "Guild Master" && guildID === hypixelGuildID) {
@@ -197,7 +170,7 @@ module.exports = {
const newVerify = new verify({ const newVerify = new verify({
_id: new mongoose.Types.ObjectId(), _id: new mongoose.Types.ObjectId(),
userID: user.id, userID: user.id,
uuid: userUUID, uuid: userUUID
}); });
await newVerify.save(); await newVerify.save();
@@ -206,22 +179,17 @@ module.exports = {
embeds: [ embeds: [
{ {
title: interaction.guild.name, title: interaction.guild.name,
description: description: "You have successfully verified `" + username + "` with the account `" + stats.data.player.displayname + "`.",
"You have successfully verified `" +
username +
"` with the account `" +
stats.data.player.displayname +
"`.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
icon_url: interaction.guild.iconURL(), icon_url: interaction.guild.iconURL(),
text: interaction.guild.name + " | Developed by Taken#0002", text: interaction.guild.name + " | Developed by Taken#0002"
}, }
}, }
], ]
}); });
}, }
}; };

View File

@@ -1,35 +1,38 @@
const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js"); const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require('discord.js');
const { color } = require("../config/options.json"); const { color } = require('../config/options.json');
const verify = require("../schemas/verifySchema.js"); const verify = require('../schemas/verifySchema.js');
const fetch = require("axios"); const fetch = require('axios');
module.exports = { module.exports = {
name: "whois", name: 'whois',
description: "Get's the ign of a user.", description: 'Get\'s the ign of a user.',
type: "slash", type: 'slash',
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("whois") .setName('whois')
.setDescription("Get's the ign of a user.") .setDescription('Get\'s the ign of a user.')
.addUserOption((option) => .addUserOption(option =>
option.setName("user").setDescription("The user to get the ign of.").setRequired(true), option
) .setName('user')
.setDescription('The user to get the ign of.')
.setRequired(true))
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false), .setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user = interaction.options.getUser("user"); const user = interaction.options.getUser('user');
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const mojang = "https://api.mojang.com/user/profile/"; const mojang = "https://api.mojang.com/user/profile/"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const verifiedUser = await verify.findOne({ userID: user.id }); const verifiedUser = await verify.findOne({ userID: user.id });
if (!verifiedUser) { if (!verifiedUser) {
interaction.editReply({ content: "This user has not verified their account." }); interaction.editReply({ content: 'This user has not verified their account.' });
return; return
} }
const userCheck = await fetch(mojang + verifiedUser.uuid); const userCheck = await fetch(mojang + verifiedUser.uuid);
@@ -37,20 +40,19 @@ module.exports = {
const head = minotar + ign; const head = minotar + ign;
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: interaction.guild.name, title: interaction.guild.name,
description: "**User:** " + userMention(user.id) + "\n**IGN:** " + ign, description: "**User:** " + userMention(user.id) + "\n**IGN:** " + ign,
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: head, url: head
}, },
footer: { footer: {
text: interaction.guild.name + " | Developed by: @Taken#0002", text: interaction.guild.name + " | Developed by: @Taken#0002",
icon_url: interaction.guild.iconURL({ dynamic: true }), icon_url: interaction.guild.iconURL({ dynamic: true })
}, }
}, }]
], })
});
}, }
}; };

View File

@@ -1,4 +1,4 @@
version: "1.0" version: '1.0'
services: services:
illegitimate: illegitimate:
image: "illegitimate-bot:latest" image: "illegitimate-bot:latest"

View File

@@ -1,29 +1,30 @@
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const fetch = require("axios"); const fetch = require('axios');
const guildapp = require("../../schemas/guildAppSchema.js"); const guildapp = require('../../schemas/guildAppSchema.js');
const { bwfkdr, bwstars, bwwins, swstars, duelswins, duelswlr } = require("../../config/reqs.json"); const { bwfkdr, bwstars, bwwins, swstars, duelswins, duelswlr } = require('../../config/reqs.json');
const env = require("dotenv").config(); const env = require("dotenv").config();
const hypixelApiKey = process.env.HYPIXELAPIKEY; const hypixelApiKey = process.env.HYPIXELAPIKEY;
const { getExactLevel, skywarsLevel, getLevelForExp } = require("../../utils/functions.js"); const { getExactLevel, skywarsLevel, getLevelForExp } = require("../../utils/functions.js");
module.exports = { module.exports = {
name: "checkstats", name: 'checkstats',
description: "Check your stats.", description: 'Check your stats.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const message = interaction.message; const message = interaction.message;
const embed = message.embeds[0]; const embed = message.embeds[0];
const applicantId = embed.footer.text.split(" ")[1]; const applicantId = embed.footer.text.split(" ")[1]
const guildappdata = await guildapp.findOne({ userID: applicantId }); const guildappdata = await guildapp.findOne({ userID: applicantId })
const uuid = guildappdata.uuid; const uuid = guildappdata.uuid;
const mojang = "https://api.mojang.com/user/profile/"; const mojang = "https://api.mojang.com/user/profile/"
const hypixel = "https://api.hypixel.net/player"; const hypixel = "https://api.hypixel.net/player"
const guildAPI = "https://api.hypixel.net/guild"; const guildAPI = "https://api.hypixel.net/guild"
const minotar = "https://minotar.net/helm/"; const minotar = "https://minotar.net/helm/";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
@@ -31,17 +32,15 @@ module.exports = {
const ign = userCheck.data.name; const ign = userCheck.data.name;
const head = minotar + ign; const head = minotar + ign;
const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + uuid; const player = hypixel + "?key=" + hypixelApiKey + "&uuid=" + uuid
const stats = await fetch(player); const stats = await fetch(player);
if (!stats.data.player) { if (!stats.data.player) {
interaction.editReply({ interaction.editReply({
embeds: [ embeds: [{
{
description: "That player hasn't played Hypixel before.", description: "That player hasn't played Hypixel before.",
color: embedColor, color: embedColor
}, }]
],
}); });
return; return;
} }
@@ -49,19 +48,19 @@ module.exports = {
const rank2 = stats.data.player.newPackageRank; const rank2 = stats.data.player.newPackageRank;
const monthlyRank = stats.data.player.monthlyPackageRank; const monthlyRank = stats.data.player.monthlyPackageRank;
if (rank2 === "VIP") { if (rank2 === 'VIP') {
var rank = "[VIP] "; var rank = "[VIP] "
} else if (rank2 === "VIP_PLUS") { } else if (rank2 === 'VIP_PLUS') {
var rank = "[VIP+] "; var rank = "[VIP+] "
} else if (rank2 === "MVP") { } else if (rank2 === 'MVP') {
var rank = "[MVP] "; var rank = "[MVP] "
} else if (rank2 === "MVP_PLUS" && monthlyRank === "NONE") { } else if (rank2 === 'MVP_PLUS' && monthlyRank === 'NONE') {
var rank = "[MVP+] "; var rank = "[MVP+] "
} else if (rank2 === "MVP_PLUS" && monthlyRank === "SUPERSTAR") { } else if (rank2 === 'MVP_PLUS' && monthlyRank === 'SUPERSTAR') {
var rank = "[MVP++] "; var rank = "[MVP++] "
} }
const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + uuid; const guild = guildAPI + "?key=" + hypixelApiKey + "&player=" + uuid
const guildCheck = await fetch(guild); const guildCheck = await fetch(guild);
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
@@ -71,11 +70,11 @@ module.exports = {
} }
if (!guildCheck.data.guild) { if (!guildCheck.data.guild) {
var guildTag = ""; var guildTag = ""
} else if (!guildCheck.data.guild.tag) { } else if (!guildCheck.data.guild.tag) {
var guildTag = ""; var guildTag = ""
} else { } else {
var guildTag = " [" + guildCheck.data.guild.tag + "]"; var guildTag = " [" + guildCheck.data.guild.tag + "]"
} }
//bedwars level //bedwars level
@@ -97,9 +96,9 @@ module.exports = {
//skywars wins //skywars wins
const hsswwins = stats.data.player.stats.SkyWars.wins; const hsswwins = stats.data.player.stats.SkyWars.wins;
// dueks kdr // dueks kdr
const hsduelskills = stats.data.player.stats.Duels.kills; const hsduelskills = stats.data.player.stats.Duels.kills
const hsduelsdeaths = stats.data.player.stats.Duels.deaths; const hsduelsdeaths = stats.data.player.stats.Duels.deaths
const hsduelskd = hsduelskills / hsduelsdeaths; const hsduelskd = hsduelskills / hsduelsdeaths
// duels wins // duels wins
const hsduelswins = stats.data.player.stats.Duels.wins; const hsduelswins = stats.data.player.stats.Duels.wins;
// duels wlr // duels wlr
@@ -110,95 +109,72 @@ module.exports = {
const level = getExactLevel(hypixelExp); const level = getExactLevel(hypixelExp);
if (hsbwstars < bwstars || hsbwfkdr < bwfkdr || hsbwwins < bwwins) { if (hsbwstars < bwstars || hsbwfkdr < bwfkdr || hsbwwins < bwwins) {
var bwtitle = "<a:cross_a:1087808606897983539> This player does not meet the BedWars requirements."; var bwtitle = "<a:cross_a:1087808606897983539> This player does not meet the BedWars requirements."
} else { } else {
var bwtitle = "<a:check_a:1087808632172847134> This player meets the BedWars requirements."; var bwtitle = "<a:check_a:1087808632172847134> This player meets the BedWars requirements."
} }
if (hsswstars < swstars) { if (hsswstars < swstars) {
var swtitle = "<a:cross_a:1087808606897983539> This player does not meet the SkyWars requirements."; var swtitle = "<a:cross_a:1087808606897983539> This player does not meet the SkyWars requirements."
} else { } else {
var swtitle = "<a:check_a:1087808632172847134> This player meets the SkyWars requirements."; var swtitle = "<a:check_a:1087808632172847134> This player meets the SkyWars requirements."
} }
if (hsduelswins < duelswins || hsduelswlr < duelswlr) { if (hsduelswins < duelswins || hsduelswlr < duelswlr) {
var duelstitle = "<a:cross_a:1087808606897983539> This player does not meet the Duels requirements."; var duelstitle = "<a:cross_a:1087808606897983539> This player does not meet the Duels requirements."
} else { } else {
var duelstitle = "<a:check_a:1087808632172847134> This player meets the Duels requirements."; var duelstitle = "<a:check_a:1087808632172847134> This player meets the Duels requirements."
} }
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: rank + stats.data.player.displayname + guildTag, title: rank + stats.data.player.displayname + guildTag,
description: description: "**Network Level:** `" +
"**Network Level:** `" + level.toFixed(2).toString() + "`\n" +
level.toFixed(2).toString() + "**Current Guild:** `" + guildName + "`",
"`\n" +
"**Current Guild:** `" +
guildName +
"`",
color: embedColor, color: embedColor,
thumbnail: { url: head }, thumbnail: { url: head },
footer: { footer: {
text: interaction.guild.name + " | Developed by @Taken#0002", text: interaction.guild.name + " | Developed by @Taken#0002",
icon_url: interaction.guild.iconURL(), icon_url: interaction.guild.iconURL()
}, },
fields: [ fields: [
{ {
name: bwtitle, name: bwtitle,
value: value: "**➺ Stars:** `" +
"**➺ Stars:** `" + hsbwstars.toFixed(2).toString() + " / " +
hsbwstars.toFixed(2).toString() + bwstars.toString() + "`\n" +
" / " +
bwstars.toString() +
"`\n" +
"**➺ FKDR:** `" + "**➺ FKDR:** `" +
hsbwfkdr.toFixed(2).toString() + hsbwfkdr.toFixed(2).toString() +
" / " + " / " + bwfkdr.toString() + "`\n" +
bwfkdr.toString() +
"`\n" +
"**➺ Wins:** `" + "**➺ Wins:** `" +
hsbwwins.toString() + hsbwwins.toString() + " / " +
" / " + bwwins.toString() + "`"
bwwins.toString() +
"`",
}, },
{ {
name: swtitle, name: swtitle,
value: value:
"**➺ Stars:** `" + "**➺ Stars:** `" +
hsswstars.toFixed(2).toString() + hsswstars.toFixed(2).toString() +
" / " + " / " + swstars.toString() + "`\n" +
swstars.toString() +
"`\n" +
"**➺ KDR:** `" + "**➺ KDR:** `" +
hsswkd.toFixed(2).toString() + hsswkd.toFixed(2).toString() + "`\n" +
"`\n" +
"**➺ Wins:** `" + "**➺ Wins:** `" +
hsswwins.toString() + hsswwins.toString() + "`"
"`",
}, },
{ {
name: duelstitle, name: duelstitle,
value: value: "**➺ Wins:** `" +
"**➺ Wins:** `" +
hsduelswins.toString() + hsduelswins.toString() +
" / " + " / " + duelswins.toString() + "`\n" +
duelswins.toString() +
"`\n" +
"**➺ WLR:** `" + "**➺ WLR:** `" +
hsduelswlr.toFixed(2).toString() + hsduelswlr.toFixed(2).toString() +
" / " + " / " + duelswlr.toString() + "`\n" +
duelswlr.toString() +
"`\n" +
"**➺ KDR:** `" + "**➺ KDR:** `" +
hsduelskd.toFixed(2).toString() + hsduelskd.toFixed(2).toString() + "`"
"`", }
}, ]
], }]
},
],
}); });
}, }
}; };

View File

@@ -1,572 +1,502 @@
const { ButtonBuilder, ButtonStyle, ActionRowBuilder, EmbedBuilder } = require("discord.js"); const { ButtonBuilder, ButtonStyle, ActionRowBuilder, EmbedBuilder } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const { largeM, smallM, ignM } = require("../../config/limitmessages.json"); const { largeM, smallM, ignM } = require('../../config/limitmessages.json')
const { applicationsChannel } = require("../../config/options.json"); const { applicationsChannel } = require('../../config/options.json');
const { qu1, qu2, qu3, qu4, qu5, qu6, qu7, qu8 } = require("../../config/questions.json"); const { qu1, qu2, qu3, qu4, qu5, qu6, qu7, qu8 } = require('../../config/questions.json');
const { rq1, rq2, rq3, rq4, rq5, rq6, rq7, rq8 } = require("../../config/questions.json"); const { rq1, rq2, rq3, rq4, rq5, rq6, rq7, rq8 } = require('../../config/questions.json');
const { guildRole } = require("../../config/roles.json"); const { guildRole } = require('../../config/roles.json')
const mongoose = require("mongoose"); const mongoose = require('mongoose');
const guildapp = require("../../schemas/guildAppSchema.js"); const guildapp = require('../../schemas/guildAppSchema.js');
const fetch = require("axios"); const fetch = require('axios');
module.exports = { module.exports = {
name: "guildapply", name: 'guildapply',
description: "Guild application button.", description: 'Guild application button.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const user = interaction.user; const user = interaction.user;
const guild = interaction.guild; const guild = interaction.guild;
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const mojangAPI = "https://api.mojang.com/users/profiles/minecraft/"; const mojangAPI = "https://api.mojang.com/users/profiles/minecraft/"
const userRoles = guild.members.cache.get(user.id).roles.cache.map((role) => role.id); const userRoles = guild.members.cache.get(user.id).roles.cache.map(role => role.id);
if (interaction.customId === 'guildapply') {
if (interaction.customId === "guildapply") {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
if (userRoles.includes(guildRole)) { if (userRoles.includes(guildRole)) {
await interaction.editReply({ content: "You are already a member of the guild.", ephemeral: true }); await interaction.editReply({ content: "You are already a member of the guild.", ephemeral: true });
return; return
} }
const application = await guildapp.findOne({ userID: user.id }); const application = await guildapp.findOne({ userID: user.id });
if (application) { if (application) {
await interaction.editReply({ await interaction.editReply({ content: "You already have an application in progress.", ephemeral: true });
content: "You already have an application in progress.", return
ephemeral: true,
});
return;
} }
const tooLong = new EmbedBuilder().setDescription("You took too long to respond.").setColor(embedColor); const tooLong = new EmbedBuilder()
.setDescription("You took too long to respond.")
.setColor(embedColor)
const cancelled = new EmbedBuilder() const cancelled = new EmbedBuilder()
.setDescription("You have cancelled your application.") .setDescription("You have cancelled your application.")
.setColor(embedColor); .setColor(embedColor)
const attachments = new EmbedBuilder() const attachments = new EmbedBuilder()
.setDescription("You have uploaded an attachment. Please do not upload images, videos, or GIFS.") .setDescription("You have uploaded an attachment. Please do not upload images, videos, or GIFS.")
.setColor(embedColor); .setColor(embedColor)
try { try {
await user.send({ await user.send({
embeds: [ embeds: [{
{ title: 'Guild Application',
title: "Guild Application", description: "Please answer the following questions to apply for the guild.\n" +
description:
"Please answer the following questions to apply for the guild.\n" +
"If you wish to cancel your application, please press type `cancel` at any time.\n" + "If you wish to cancel your application, please press type `cancel` at any time.\n" +
"If you wish to proceed with your application, please type `yes`.\n\n" + "If you wish to proceed with your application, please type `yes`.\n\n" +
"**Do not upload images, videos, or GIFS.**\n" + "**Do not upload images, videos, or GIFS.**\n" +
"You have a minute to respond to this message.", "You have a minute to respond to this message.",
color: embedColor, color: embedColor,
}, }]
], })
});
} catch (error) { } catch (error) {
await interaction.editReply({ content: "Please enable your DMs.", ephemeral: true }); await interaction.editReply({ content: "Please enable your DMs.", ephemeral: true });
return; return
} }
await interaction.editReply({ content: "Please check your DMs.", ephemeral: true }); await interaction.editReply({ content: "Please check your DMs.", ephemeral: true})
const input = await user.dmChannel.awaitMessages({ const input = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60, time: 1000 * 60
}); });
if (input.first().attachments.size > 0) { if (input.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (input.size === 0) { if (input.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] });
return; return
} }
if (input.first().content.toLowerCase() !== "yes") { if (input.first().content.toLowerCase() !== 'yes') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled]} );
return; return
} }
// first question // first question
const question1 = await user.send({ const question1 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 1**",
title: "**Question 1**", description: qu1 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + ignM + "`",
description:
qu1 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
ignM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 5 minutes to respond to this message.", text: "You have 5 minutes to respond to this message."
}, }
}, }]
], })
});
const answer1 = await user.dmChannel.awaitMessages({ const answer1 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5,
}); });
if (answer1.first().attachments.size > 0) { if (answer1.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer1.first().content > 16) { if (answer1.first().content > 16) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 16.", description: "Max character limit is 16.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
try { try {
await fetch(mojangAPI + answer1.first().content); await fetch(mojangAPI + answer1.first().content)
} catch (error) { } catch (error) {
await user.send({ await user.send({
embeds: [ embeds: [{
{ description: "That is not a valid Minecraft username.\n" +
description: "That is not a valid Minecraft username.\n" + "Application cancelled.", "Application cancelled.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
if (answer1.size === 0) { if (answer1.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer1.first().content.toLowerCase() === "cancel") { if (answer1.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer1_1 = answer1.first().content; const answer1_1 = answer1.first().content
// second question // second question
const question2 = await user.send({ const question2 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 2**",
title: "**Question 2**", description: qu2 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n" + "`(8 characters max)`",
description:
qu2 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n" +
"`(8 characters max)`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer2 = await user.dmChannel.awaitMessages({ const answer2 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer2.first().attachments.size > 0) { if (answer2.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer2.first().content.size > 8) { if (answer2.first().content.size > 8) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 8.", description: "Max character limit is 8.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
if (answer2.size === 0) { if (answer2.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer2.first().content.toLowerCase() === "cancel") { if (answer2.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer2_1 = answer2.first().content; const answer2_1 = answer2.first().content
// third question // third question
const question3 = await user.send({ const question3 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 3**",
title: "**Question 3**", description: qu3 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + smallM + "`",
description:
qu3 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
smallM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer3 = await user.dmChannel.awaitMessages({ const answer3 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer3.first().attachments.size > 0) { if (answer3.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer3.first().content > 128) { if (answer3.first().content > 128) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 128.", description: "Max character limit is 128.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer3.size === 0) { if (answer3.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer3.first().content.toLowerCase() === "cancel") { if (answer3.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer3_1 = answer3.first().content; const answer3_1 = answer3.first().content
// fourth question // fourth question
const question4 = await user.send({ const question4 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 4**",
title: "**Question 4**", description: qu4 + "\n\nPlease type your answer below or type `cancel` to cancel your application." +
description: " `(We expect a longer answer.)`\n`" + largeM + "`",
qu4 +
"\n\nPlease type your answer below or type `cancel` to cancel your application." +
" `(We expect a longer answer.)`\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer4 = await user.dmChannel.awaitMessages({ const answer4 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer4.first().attachments.size > 0) { if (answer4.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer4.first().content > 256) { if (answer4.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer4.size === 0) { if (answer4.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer4.first().content.toLowerCase() === "cancel") { if (answer4.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer4_1 = answer4.first().content; const answer4_1 = answer4.first().content
// fifth question // fifth question
const question5 = await user.send({ const question5 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 5**",
title: "**Question 5**", description: qu5 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + smallM + "`",
description:
qu5 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
smallM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer5 = await user.dmChannel.awaitMessages({ const answer5 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer5.first().attachments.size > 0) { if (answer5.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer5.first().content > 128) { if (answer5.first().content > 128) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 128.", description: "Max character limit is 128.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer5.size === 0) { if (answer5.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer5.first().content.toLowerCase() === "cancel") { if (answer5.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer5_1 = answer5.first().content; const answer5_1 = answer5.first().content
// sixth question // sixth question
const question6 = await user.send({ const question6 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 6**",
title: "**Question 6**", description: qu6 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + largeM + "`",
description:
qu6 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer6 = await user.dmChannel.awaitMessages({ const answer6 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer6.first().attachments.size > 0) { if (answer6.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer6.first().content > 256) { if (answer6.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer6.size === 0) { if (answer6.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer6.first().content.toLowerCase() === "cancel") { if (answer6.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer6_1 = answer6.first().content; const answer6_1 = answer6.first().content
// seventh question // seventh question
const question7 = await user.send({ const question7 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 7**",
title: "**Question 7**", description: qu7 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + smallM + "`",
description:
qu7 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
smallM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer7 = await user.dmChannel.awaitMessages({ const answer7 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer7.first().attachments.size > 0) { if (answer7.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer7.first().content > 128) { if (answer7.first().content > 128) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 128.", description: "Max character limit is 128.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer7.size === 0) { if (answer7.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer7.first().content.toLowerCase() === "cancel") { if (answer7.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer7_1 = answer7.first().content; const answer7_1 = answer7.first().content
// eighth question // eighth question
const question8 = await user.send({ const question8 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 8**",
title: "**Question 8**", description: qu8 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n" + "`(64 characters max)`",
description:
qu8 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n" +
"`(64 characters max)`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer8 = await user.dmChannel.awaitMessages({ const answer8 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer8.first().attachments.size > 0) { if (answer8.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer8.first().content > 64) { if (answer8.first().content > 64) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 64.", description: "Max character limit is 64.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer8.size === 0) { if (answer8.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer8.first().content.toLowerCase() === "cancel") { if (answer8.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer8_1 = answer8.first().content; const answer8_1 = answer8.first().content
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "If you want to submit your application, type `yes` if not, type `no`", description: "If you want to submit your application, type `yes` if not, type `no`",
color: embedColor, color: embedColor
}, }]
], })
});
const final = await user.dmChannel.awaitMessages({ const final = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5
}); });
if (final.first().attachments.size > 0) { if (final.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (final.size === 0) { if (final.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] });
return; return
} }
if (final.first().content.toLowerCase() !== "yes") { if (final.first().content.toLowerCase() !== 'yes') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled]} );
return; return
} }
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Your application has been submitted!", description: "Your application has been submitted!",
color: embedColor, color: embedColor
}, }]
], })
});
const userCheck = await fetch(mojangAPI + answer1_1); const userCheck = await fetch(mojangAPI + answer1_1)
const uuid = userCheck.data.id; const uuid = userCheck.data.id
const newGuildApp = new guildapp({ const newGuildApp = new guildapp({
_id: new mongoose.Types.ObjectId(), _id: new mongoose.Types.ObjectId(),
userID: user.id, userID: user.id,
uuid: uuid, uuid: uuid,
}); })
await newGuildApp.save(); await newGuildApp.save()
const channel = guild.channels.cache.get(applicationsChannel); const channel = guild.channels.cache.get(applicationsChannel);
await channel.send({ await channel.send({
embeds: [ embeds: [{
{
title: user.username + "#" + user.discriminator + " - Guild Application", title: user.username + "#" + user.discriminator + " - Guild Application",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: user.avatarURL(), url: user.avatarURL()
}, },
fields: [ fields: [
{ {
name: rq1, name: rq1,
value: "```" + answer1_1 + "```", value: "```" + answer1_1 + "```"
}, },
{ {
name: rq2, name: rq2,
value: "```" + answer2_1 + "```", value: "```" + answer2_1 + "```"
}, },
{ {
name: rq3, name: rq3,
value: "```" + answer3_1 + "```", value: "```" + answer3_1 + "```"
}, },
{ {
name: rq4, name: rq4,
value: "```" + answer4_1 + "```", value: "```" + answer4_1 + "```"
}, },
{ {
name: rq5, name: rq5,
value: "```" + answer5_1 + "```", value: "```" + answer5_1 + "```"
}, },
{ {
name: rq6, name: rq6,
value: "```" + answer6_1 + "```", value: "```" + answer6_1 + "```"
}, },
{ {
name: rq7, name: rq7,
value: "```" + answer7_1 + "```", value: "```" + answer7_1 + "```"
}, },
{ {
name: rq8, name: rq8,
value: "```" + answer8_1 + "```", value: "```" + answer8_1 + "```"
}, }
], ],
footer: { footer: {
iconURL: guild.iconURL(), iconURL: guild.iconURL(),
text: "ID: " + user.id, text: "ID: " + user.id
}, }
}, }],
],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder().addComponents(
new ButtonBuilder() new ButtonBuilder()
@@ -580,10 +510,11 @@ module.exports = {
new ButtonBuilder() new ButtonBuilder()
.setCustomId("checkstats") .setCustomId("checkstats")
.setLabel("Check Stats") .setLabel("Check Stats")
.setStyle(ButtonStyle.Secondary), .setStyle(ButtonStyle.Secondary)
), )
], ]
}); });
} }
}, }
}; }

View File

@@ -1,16 +1,17 @@
const { ActionRowBuilder, ButtonStyle, ButtonBuilder } = require("discord.js"); const { ActionRowBuilder, ButtonStyle, ButtonBuilder } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const mongoose = require("mongoose"); const mongoose = require("mongoose");
const guildapp = require("../../schemas/guildAppSchema.js"); const guildapp = require('../../schemas/guildAppSchema.js');
const waitingList = require("../../schemas/waitinglistSchema.js"); const waitingList = require('../../schemas/waitinglistSchema.js');
const { waitingListRole } = require("../../config/roles.json"); const { waitingListRole } = require('../../config/roles.json');
module.exports = { module.exports = {
name: "guildapplicationaccept", name: 'guildapplicationaccept',
description: "Accept a guild application.", description: 'Accept a guild application.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
await interaction.deferReply(); await interaction.deferReply();
const user = interaction.user; const user = interaction.user;
@@ -19,12 +20,12 @@ module.exports = {
const message = interaction.message; const message = interaction.message;
const embed = message.embeds[0]; const embed = message.embeds[0];
const applicantId = embed.footer.text.split(" ")[1]; const applicantId = embed.footer.text.split(" ")[1]
const applicantIGN1 = embed.fields[0].value; const applicantIGN1 = embed.fields[0].value;
const applicantIGN = applicantIGN1.replaceAll("`", ""); const applicantIGN = applicantIGN1.replaceAll("`", "");
const applicant = await guild.members.fetch(applicantId); const applicant = await guild.members.fetch(applicantId)
const applicantUsername = applicant.user.username + "#" + applicant.user.discriminator; const applicantUsername = applicant.user.username + "#" + applicant.user.discriminator;
await message.edit({ await message.edit({
@@ -44,21 +45,19 @@ module.exports = {
.setCustomId("checkstats") .setCustomId("checkstats")
.setLabel("Check Stats") .setLabel("Check Stats")
.setStyle(ButtonStyle.Secondary) .setStyle(ButtonStyle.Secondary)
.setDisabled(true), .setDisabled(true)
), )
], ]
}); });
await applicant.send({ await applicant.send({
embeds: [ embeds: [{
{
description: `Your application for the Illegitimate guild has been accepted.`, description: `Your application for the Illegitimate guild has been accepted.`,
color: embedColor, color: embedColor
}, }]
],
}); });
const applicantEntry = await guildapp.findOne({ userID: applicantId }); const applicantEntry = await guildapp.findOne({ userID: applicantId })
const applicantUUID = applicantEntry.uuid; const applicantUUID = applicantEntry.uuid;
const time = Date.now(); const time = Date.now();
@@ -67,7 +66,7 @@ module.exports = {
userID: applicantId, userID: applicantId,
uuid: applicantUUID, uuid: applicantUUID,
IGN: applicantIGN, IGN: applicantIGN,
timestamp: time, timestamp: time
}); });
await waitingListAdd.save(); await waitingListAdd.save();
@@ -75,21 +74,20 @@ module.exports = {
await applicant.roles.add(waitingListRole); await applicant.roles.add(waitingListRole);
await guildapp.findOneAndDelete({ userID: applicantId }); await guildapp.findOneAndDelete({ userID: applicantId });
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: applicantUsername + " - Guild Application", title: applicantUsername + " - Guild Application",
description: "Application has been accepted by <@" + user.id + ">.", description: "Application has been accepted by <@" + user.id + ">.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: applicant.avatarURL(), url: applicant.avatarURL()
}, },
footer: { footer: {
iconURL: guild.iconURL(), iconURL: guild.iconURL(),
text: "ID: " + applicant.id, text: "ID: " + applicant.id
}, }
}, }]
],
}); });
}, }
}; };

View File

@@ -1,12 +1,13 @@
const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require("discord.js"); const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
module.exports = { module.exports = {
name: "guildapplicationdeny", name: 'guildapplicationdeny',
description: "Deny a guild application.", description: 'Deny a guild application.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const channel = interaction.channel; const channel = interaction.channel;
const guild = interaction.guild; const guild = interaction.guild;
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
@@ -14,18 +15,18 @@ module.exports = {
const message = interaction.message; const message = interaction.message;
const modal = new ModalBuilder() const modal = new ModalBuilder()
.setTitle("Deny Reason") .setTitle('Deny Reason')
.setCustomId("denyreasonbox") .setCustomId('denyreasonbox')
.setComponents( .setComponents(
new ActionRowBuilder().setComponents( new ActionRowBuilder().setComponents(
new TextInputBuilder() new TextInputBuilder()
.setLabel("Deny Reason") .setLabel('Deny Reason')
.setCustomId("denyreason") .setCustomId('denyreason')
.setStyle(TextInputStyle.Paragraph) .setStyle(TextInputStyle.Paragraph)
.setPlaceholder("Enter a reason for denying the application") .setPlaceholder('Enter a reason for denying the application')
.setRequired(false), .setRequired(false)
), )
); )
await interaction.showModal(modal); await interaction.showModal(modal);
}, }
}; };

View File

@@ -1,14 +1,5 @@
const { ButtonBuilder, ActionRowBuilder, ButtonStyle, EmbedBuilder } = require("discord.js"); const { ButtonBuilder, ActionRowBuilder, ButtonStyle, EmbedBuilder } = require("discord.js");
const { const { gm, manager, moderator, beast, member, trialmember, guildStaff, guildRole } = require("../../config/roles.json");
gm,
manager,
moderator,
beast,
member,
trialmember,
guildStaff,
guildRole,
} = require("../../config/roles.json");
const { ignM, smallM, largeM } = require("../../config/limitmessages.json"); const { ignM, smallM, largeM } = require("../../config/limitmessages.json");
const { ia1, ia2, ia3, ria1, ria2, ria3 } = require("../../config/questions.json"); const { ia1, ia2, ia3, ria1, ria2, ria3 } = require("../../config/questions.json");
const { color, inactivityLogChannel } = require("../../config/options.json"); const { color, inactivityLogChannel } = require("../../config/options.json");
@@ -29,11 +20,13 @@ module.exports = {
if (!userRoles.some((role) => guildRoles.includes(role.id))) { if (!userRoles.some((role) => guildRoles.includes(role.id))) {
return await interaction.reply({ return await interaction.reply({
content: "Only guild members can use this button.", content: "Only guild members can use this button.",
ephemeral: true, ephemeral: true
}); });
} }
const tooLong = new EmbedBuilder().setDescription("You took too long to respond.").setColor(embedColor); const tooLong = new EmbedBuilder()
.setDescription("You took too long to respond.")
.setColor(embedColor);
const cancelled = new EmbedBuilder() const cancelled = new EmbedBuilder()
.setDescription("You have cancelled your application.") .setDescription("You have cancelled your application.")
.setColor(embedColor); .setColor(embedColor);
@@ -46,15 +39,13 @@ module.exports = {
embeds: [ embeds: [
{ {
title: "Guild Inactivity Log", title: "Guild Inactivity Log",
description: description: "Please answer the following questions to submit an inactivity log for the guild.\n" +
"Please answer the following questions to submit an inactivity log for the guild.\n" +
"If you wish to cancel your form, please press type `cancel` at any time.\n" + "If you wish to cancel your form, please press type `cancel` at any time.\n" +
"If you wish to proceed with your form, please type `yes`.\n\n" + "If you wish to proceed with your form, please type `yes`.\n\n" + "**Do not upload images, videos, or GIFS.**\n" +
"**Do not upload images, videos, or GIFS.**\n" +
"You have a minute to respond to this message.", "You have a minute to respond to this message.",
color: embedColor, color: embedColor
}, }
], ]
}); });
} catch (error) { } catch (error) {
return await interaction.reply({ content: "Please enable your DMs.", ephemeral: true }); return await interaction.reply({ content: "Please enable your DMs.", ephemeral: true });
@@ -65,7 +56,7 @@ module.exports = {
const input = await user.dmChannel.awaitMessages({ const input = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: (m) => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60, time: 1000 * 60
}); });
if (input.first().attachments.size > 0) { if (input.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
@@ -84,23 +75,19 @@ module.exports = {
embeds: [ embeds: [
{ {
title: "**Question 1**", title: "**Question 1**",
description: description: ia1 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + ignM + "`",
ia1 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
ignM +
"`",
color: embedColor, color: embedColor,
footer: { footer: {
text: "You have 5 minutes to respond to this message.", text: "You have 5 minutes to respond to this message."
}, }
}, }
], ]
}); });
const answer1 = await user.dmChannel.awaitMessages({ const answer1 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: (m) => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5
}); });
if (answer1.first().attachments.size > 0) { if (answer1.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
@@ -111,9 +98,9 @@ module.exports = {
embeds: [ embeds: [
{ {
description: "Max character limit is 16.", description: "Max character limit is 16.",
color: embedColor, color: embedColor
}, }
], ]
}); });
return; return;
} }
@@ -124,9 +111,9 @@ module.exports = {
embeds: [ embeds: [
{ {
description: "That is not a valid Minecraft username.\n" + "Application cancelled.", description: "That is not a valid Minecraft username.\n" + "Application cancelled.",
color: embedColor, color: embedColor
}, }
], ]
}); });
return; return;
} }
@@ -141,25 +128,19 @@ module.exports = {
const answer1_1 = answer1.first().content; const answer1_1 = answer1.first().content;
await user.send({ await user.send({
embeds: [ embeds: [{
{
title: "**Question 2**", title: "**Question 2**",
description: description: ia2 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + smallM + "`",
ia2 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
smallM +
"`",
color: embedColor, color: embedColor,
footer: { footer: {
text: "You have 5 minutes to respond to this message.", text: "You have 5 minutes to respond to this message."
}, }
}, }]
],
}); });
const answer2 = await user.dmChannel.awaitMessages({ const answer2 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: (m) => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5
}); });
if (answer2.first().attachments.size > 0) { if (answer2.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
@@ -170,9 +151,9 @@ module.exports = {
embeds: [ embeds: [
{ {
description: "Max character limit is 128.", description: "Max character limit is 128.",
color: embedColor, color: embedColor
}, }
], ]
}); });
return; return;
} }
@@ -187,25 +168,19 @@ module.exports = {
const answer2_1 = answer1.first().content; const answer2_1 = answer1.first().content;
await user.send({ await user.send({
embeds: [ embeds: [{
{
title: "**Question 3**", title: "**Question 3**",
description: description: ia3 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + largeM + "`",
ia3 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer: {
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
],
}); });
const answer3 = await user.dmChannel.awaitMessages({ const answer3 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: (m) => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer3.first().attachments.size > 0) { if (answer3.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
@@ -216,9 +191,9 @@ module.exports = {
embeds: [ embeds: [
{ {
description: "Max character limit is 256", description: "Max character limit is 256",
color: embedColor, color: embedColor
}, }
], ]
}); });
return; return;
} }
@@ -233,70 +208,64 @@ module.exports = {
const answer3_1 = answer1.first().content; const answer3_1 = answer1.first().content;
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "If you want to submit your application, type `yes` if not, type `no`", description: "If you want to submit your application, type `yes` if not, type `no`",
color: embedColor, color: embedColor
}, }]
], })
});
const final = await user.dmChannel.awaitMessages({ const final = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5
}); });
if (final.first().attachments.size > 0) { if (final.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (final.size === 0) { if (final.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] });
return; return
} }
if (final.first().content.toLowerCase() !== "yes") { if (final.first().content.toLowerCase() !== 'yes') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled]} );
return; return
} }
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Your application has been submitted!", description: "Your application has been submitted!",
color: embedColor, color: embedColor
}, }]
], })
});
const appChannel = await guild.channels.cache.get(inactivityLogChannel); const appChannel = await guild.channels.cache.get(inactivityLogChannel);
await appChannel.send({ await appChannel.send({
embeds: [ embeds: [{
{
title: user.username + "#" + user.discriminator + " - Inactivity Application", title: user.username + "#" + user.discriminator + " - Inactivity Application",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: user.displayAvatarURL({ dynamic: true }), url: user.displayAvatarURL({ dynamic: true })
}, },
fields: [ fields: [
{ {
name: ria1, name: ria1,
value: "`" + answer1_1 + "`", value: "`" + answer1_1 + "`"
}, },
{ {
name: ria2, name: ria2,
value: "`" + answer2_1 + "`", value: "`" + answer2_1 + "`"
}, },
{ {
name: ria3, name: ria3,
value: "`" + answer3_1 + "`", value: "`" + answer3_1 + "`"
}, }
], ],
footer: { footer: {
icon_url: user.displayAvatarURL({ dynamic: true }), icon_url: user.displayAvatarURL({ dynamic: true }),
text: "ID: " + user.id, text: "ID: " + user.id
}, }
}, }],
],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder().addComponents(
new ButtonBuilder() new ButtonBuilder()
@@ -307,8 +276,8 @@ module.exports = {
.setCustomId("inactiveapplicationdeny") .setCustomId("inactiveapplicationdeny")
.setLabel("Deny") .setLabel("Deny")
.setStyle(ButtonStyle.Danger), .setStyle(ButtonStyle.Danger),
), )
], ]
}); });
}, }
}; };

View File

@@ -4,6 +4,8 @@ module.exports = {
type: "button", type: "button",
async execute(interaction) { async execute(interaction) {
await interaction.reply({ content: "This button is currently disabled.", ephemeral: true }); await interaction.reply({ content: "This button is currently disabled.", ephemeral: true });
},
}; }
}

View File

@@ -4,6 +4,8 @@ module.exports = {
type: "button", type: "button",
async execute(interaction) { async execute(interaction) {
await interaction.reply({ content: "This button is currently disabled.", ephemeral: true }); await interaction.reply({ content: "This button is currently disabled.", ephemeral: true });
},
}; }
}

View File

@@ -1,13 +1,14 @@
const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); const { ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const staffapp = require("../../schemas/staffAppSchema.js"); const staffapp = require('../../schemas/staffAppSchema.js');
module.exports = { module.exports = {
name: "staffapplicationaccept", name: 'staffapplicationaccept',
description: "Accept a staff application.", description: 'Accept a staff application.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const user = interaction.user; const user = interaction.user;
const channel = interaction.channel; const channel = interaction.channel;
const guild = interaction.guild; const guild = interaction.guild;
@@ -15,18 +16,16 @@ module.exports = {
const message = interaction.message; const message = interaction.message;
const embed = message.embeds[0]; const embed = message.embeds[0];
const applicantId = embed.footer.text.split(" ")[1]; const applicantId = embed.footer.text.split(" ")[1]
const applicant = await guild.members.fetch(applicantId); const applicant = await guild.members.fetch(applicantId)
const applicantUsername = applicant.user.username + "#" + applicant.user.discriminator; const applicantUsername = applicant.user.username + "#" + applicant.user.discriminator;
await applicant.send({ await applicant.send({
embeds: [ embeds: [{
{
description: `Your application for the Illegitimate staff team has been accepted.`, description: `Your application for the Illegitimate staff team has been accepted.`,
color: embedColor, color: embedColor
}, }]
],
}); });
await message.edit({ await message.edit({
@@ -41,28 +40,27 @@ module.exports = {
.setCustomId("staffapplicationdeny") .setCustomId("staffapplicationdeny")
.setLabel("Deny") .setLabel("Deny")
.setStyle(ButtonStyle.Danger) .setStyle(ButtonStyle.Danger)
.setDisabled(true), .setDisabled(true)
), )
], ]
}); });
await staffapp.findOneAndDelete({ userId: applicantId }); await staffapp.findOneAndDelete({ userId: applicantId });
await interaction.reply({ await interaction.reply({
embeds: [ embeds: [{
{
title: applicantUsername + " - Staff Application.", title: applicantUsername + " - Staff Application.",
description: "Application accepted by <@" + user.id + ">.", description: "Application accepted by <@" + user.id + ">.",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: applicant.avatarURL(), url: applicant.avatarURL()
}, },
footer: { footer: {
iconurl: guild.iconURL(), iconurl: guild.iconURL(),
text: "ID: " + applicantId, text: "ID: " + applicantId
}, }
}, }]
],
}); });
},
}; }
}

View File

@@ -1,24 +1,25 @@
const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require("discord.js"); const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require('discord.js');
module.exports = { module.exports = {
name: "staffapplicationdeny", name: 'staffapplicationdeny',
description: "Deny a guild application.", description: 'Deny a guild application.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const modal = new ModalBuilder() const modal = new ModalBuilder()
.setTitle("Deny Reason") .setTitle('Deny Reason')
.setCustomId("staffdenyreasonbox") .setCustomId('staffdenyreasonbox')
.setComponents( .setComponents(
new ActionRowBuilder().setComponents( new ActionRowBuilder().setComponents(
new TextInputBuilder() new TextInputBuilder()
.setLabel("Deny Reason") .setLabel('Deny Reason')
.setCustomId("staffdenyreason") .setCustomId('staffdenyreason')
.setStyle(TextInputStyle.Paragraph) .setStyle(TextInputStyle.Paragraph)
.setPlaceholder("Enter a reason for denying the application") .setPlaceholder('Enter a reason for denying the application')
.setRequired(false), .setRequired(false)
), )
); )
await interaction.showModal(modal); await interaction.showModal(modal);
}, }
}; };

View File

@@ -1,481 +1,423 @@
const { ButtonBuilder, ButtonStyle, ActionRowBuilder, EmbedBuilder } = require("discord.js"); const { ButtonBuilder, ButtonStyle, ActionRowBuilder, EmbedBuilder } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const { largeM, smallM, ignM } = require("../../config/limitmessages.json"); const { largeM, smallM, ignM } = require('../../config/limitmessages.json')
const { staffApplicationsChannel } = require("../../config/options.json"); const { staffApplicationsChannel } = require('../../config/options.json');
const { sq1, sq2, sq3, sq4, sq5, sq6 } = require("../../config/questions.json"); const { sq1, sq2, sq3, sq4, sq5, sq6 } = require('../../config/questions.json');
const { rsq1, rsq2, rsq3, rsq4, rsq5, rsq6 } = require("../../config/questions.json"); const { rsq1, rsq2, rsq3, rsq4, rsq5, rsq6 } = require('../../config/questions.json');
const { guildRole, guildStaff } = require("../../config/roles.json"); const { guildRole, guildStaff } = require('../../config/roles.json')
const mongoose = require("mongoose"); const mongoose = require('mongoose');
const staffapp = require("../../schemas/staffAppSchema.js"); const staffapp = require('../../schemas/staffAppSchema.js');
const fetch = require("axios"); const fetch = require('axios');
module.exports = { module.exports = {
name: "staffapply", name: 'staffapply',
description: "Apply for the staff team.", description: 'Apply for the staff team.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const user = interaction.user; const user = interaction.user;
const guild = interaction.guild; const guild = interaction.guild;
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const userRoles = interaction.member.roles.cache; const userRoles = interaction.member.roles.cache;
const mojangAPI = "https://api.mojang.com/users/profiles/minecraft/"; const mojangAPI = "https://api.mojang.com/users/profiles/minecraft/"
if (interaction.customId === "staffapply") { if (interaction.customId === "staffapply") {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
if (!userRoles.has(guildRole)) { if (!userRoles.has(guildRole)) {
await interaction.editReply({ await interaction.editReply({content: "You must be a member of the guild to apply for staff.", ephemeral: true});
content: "You must be a member of the guild to apply for staff.", return
ephemeral: true,
});
return;
} }
if (userRoles.has(guildStaff)) { if (userRoles.has(guildStaff)) {
await interaction.editReply({ content: "You are already a staff member.", ephemeral: true }); await interaction.editReply({content: "You are already a staff member.", ephemeral: true});
return; return
} }
const application = await staffapp.findOne({ userID: user.id }); const application = await staffapp.findOne({ userID: user.id });
if (application) { if (application) {
await interaction.editReply({ await interaction.editReply({ content: "You already have an application in progress.", ephemeral: true });
content: "You already have an application in progress.", return
ephemeral: true,
});
return;
} }
const tooLong = new EmbedBuilder().setDescription("You took too long to respond.").setColor(embedColor); const tooLong = new EmbedBuilder()
.setDescription("You took too long to respond.")
.setColor(embedColor)
const cancelled = new EmbedBuilder() const cancelled = new EmbedBuilder()
.setDescription("You have cancelled your application.") .setDescription("You have cancelled your application.")
.setColor(embedColor); .setColor(embedColor)
const attachments = new EmbedBuilder() const attachments = new EmbedBuilder()
.setDescription("You have uploaded an attachment. Please do not upload images, videos, or GIFS.") .setDescription("You have uploaded an attachment. Please do not upload images, videos, or GIFS.")
.setColor(embedColor); .setColor(embedColor)
try { try {
await user.send({ await user.send({
embeds: [ embeds: [{
{ title: 'Staff Application',
title: "Staff Application", description: "Please answer the following questions to apply for staff.\n" +
description:
"Please answer the following questions to apply for staff.\n" +
"If you wish to cancel your application, please press type `cancel` at any time.\n" + "If you wish to cancel your application, please press type `cancel` at any time.\n" +
"If you wish to proceed with your application, please type `yes`.\n\n" + "If you wish to proceed with your application, please type `yes`.\n\n" +
"**Do not upload images, videos, or GIFS.**\n" + "**Do not upload images, videos, or GIFS.**\n" +
"You have a minute to respond to this message.", "You have a minute to respond to this message.",
color: embedColor, color: embedColor,
}, }]
], })
});
} catch (error) { } catch (error) {
await interaction.editReply({ content: "Please enable your DMs.", ephemeral: true }); await interaction.editReply({ content: "Please enable your DMs.", ephemeral: true });
return; return
} }
await interaction.editReply({ content: "Please check your DMs.", ephemeral: true }); await interaction.editReply({ content: "Please check your DMs.", ephemeral: true})
const input = await user.dmChannel.awaitMessages({ const input = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60, time: 1000 * 60
}); });
if (input.first().attachments.size > 0) { if (input.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (input.size === 0) { if (input.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] });
return; return
} }
if (input.first().content.toLowerCase() !== "yes") { if (input.first().content.toLowerCase() !== 'yes') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled]} );
return; return
} }
// first question // first question
const question1 = await user.send({ const question1 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 1**",
title: "**Question 1**", description: sq1 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + ignM + "`",
description:
sq1 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
ignM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 5 minutes to respond to this message.", text: "You have 5 minutes to respond to this message."
}, }
}, }]
], })
});
const answer1 = await user.dmChannel.awaitMessages({ const answer1 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5,
}); });
if (answer1.first().attachments.size > 0) { if (answer1.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer1.first().content > 16) { if (answer1.first().content > 16) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 16.", description: "Max character limit is 16.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
try { try {
await fetch(mojangAPI + answer1.first().content); await fetch(mojangAPI + answer1.first().content)
} catch (error) { } catch (error) {
await user.send({ await user.send({
embeds: [ embeds: [{
{ description: "That is not a valid Minecraft username.\n" +
description: "That is not a valid Minecraft username.\n" + "Application cancelled.", "Application cancelled.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
if (answer1.size === 0) { if (answer1.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer1.first().content.toLowerCase() === "cancel") { if (answer1.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer1_1 = answer1.first().content; const answer1_1 = answer1.first().content
// second question // second question
const question2 = await user.send({ const question2 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 2**",
title: "**Question 2**", description: sq2 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n" + "`(64 characters max)`",
description:
sq2 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n" +
"`(64 characters max)`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer2 = await user.dmChannel.awaitMessages({ const answer2 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer2.first().attachments.size > 0) { if (answer2.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer2.first().content > 64) { if (answer2.first().content > 64) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 64.", description: "Max character limit is 64.",
color: embedColor, color: embedColor
}, }]
], })
}); return
return;
} }
if (answer2.size === 0) { if (answer2.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer2.first().content.toLowerCase() === "cancel") { if (answer2.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer2_1 = answer2.first().content; const answer2_1 = answer2.first().content
// third question // third question
const question3 = await user.send({ const question3 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 3**",
title: "**Question 3**", description: sq3 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + largeM + "`",
description:
sq3 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer3 = await user.dmChannel.awaitMessages({ const answer3 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer3.first().attachments.size > 0) { if (answer3.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer3.first().content > 256) { if (answer3.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer3.size === 0) { if (answer3.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer3.first().content.toLowerCase() === "cancel") { if (answer3.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer3_1 = answer3.first().content; const answer3_1 = answer3.first().content
// fourth question // fourth question
const question4 = await user.send({ const question4 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 4**",
title: "**Question 4**", description: sq4 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + largeM + "`",
description:
sq4 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer4 = await user.dmChannel.awaitMessages({ const answer4 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer4.first().attachments.size > 0) { if (answer4.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer4.first().content > 256) { if (answer4.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer4.size === 0) { if (answer4.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer4.first().content.toLowerCase() === "cancel") { if (answer4.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer4_1 = answer4.first().content; const answer4_1 = answer4.first().content
// fifth question // fifth question
const question5 = await user.send({ const question5 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 5**",
title: "**Question 5**", description: sq5 + "\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" + largeM + "`",
description:
sq5 +
"\n\nPlease type your answer below or type `cancel` to cancel your application.\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer5 = await user.dmChannel.awaitMessages({ const answer5 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer5.first().attachments.size > 0) { if (answer5.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer5.first().content > 256) { if (answer5.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer5.size === 0) { if (answer5.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer5.first().content.toLowerCase() === "cancel") { if (answer5.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer5_1 = answer5.first().content; const answer5_1 = answer5.first().content
// sixth question // sixth question
const question6 = await user.send({ const question6 = await user.send({
embeds: [ embeds: [{
{ title : "**Question 6**",
title: "**Question 6**", description: sq6 + "\n\nPlease type your answer below or type `cancel` to cancel your application." +
description: "`(We expect a longer answer here)`\n`" + largeM + "`",
sq6 +
"\n\nPlease type your answer below or type `cancel` to cancel your application." +
"`(We expect a longer answer here)`\n`" +
largeM +
"`",
color: embedColor, color: embedColor,
footer: { footer:{
text: "You have 15 minutes to respond to this message.", text: "You have 15 minutes to respond to this message."
}, }
}, }]
], })
});
const answer6 = await user.dmChannel.awaitMessages({ const answer6 = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 15, time: 1000 * 60 * 15
}); });
if (answer6.first().attachments.size > 0) { if (answer6.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (answer6.first().content > 256) { if (answer6.first().content > 256) {
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Max character limit is 256.", description: "Max character limit is 256.",
color: embedColor, color: embedColor
}, }]
], })
});
} }
if (answer6.size === 0) { if (answer6.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] })
return; return
} }
if (answer6.first().content.toLowerCase() === "cancel") { if (answer6.first().content.toLowerCase() === 'cancel') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled] })
return; return
} }
const answer6_1 = answer6.first().content; const answer6_1 = answer6.first().content
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "If you want to submit your application, type `yes` if not, type `no`", description: "If you want to submit your application, type `yes` if not, type `no`",
color: embedColor, color: embedColor
}, }]
], })
});
const final = await user.dmChannel.awaitMessages({ const final = await user.dmChannel.awaitMessages({
filter: (m) => m.author.id === user.id, filter: m => m.author.id === user.id,
max: 1, max: 1,
time: 1000 * 60 * 5, time: 1000 * 60 * 5
}); });
if (final.first().attachments.size > 0) { if (final.first().attachments.size > 0) {
await user.send({ embeds: [attachments] }); await user.send({ embeds: [attachments] });
return; return
} }
if (final.size === 0) { if (final.size === 0) {
await user.send({ embeds: [tooLong] }); await user.send({ embeds: [tooLong] });
return; return
} }
if (final.first().content.toLowerCase() !== "yes") { if (final.first().content.toLowerCase() !== 'yes') {
await user.send({ embeds: [cancelled] }); await user.send({ embeds: [cancelled]} );
return; return
} }
await user.send({ await user.send({
embeds: [ embeds: [{
{
description: "Your application has been submitted!", description: "Your application has been submitted!",
color: embedColor, color: embedColor
}, }]
], })
});
const userCheck = await fetch(mojangAPI + answer1_1); const userCheck = await fetch(mojangAPI + answer1_1)
const uuid = userCheck.data.id; const uuid = userCheck.data.id
const newStaffApp = new staffapp({ const newStaffApp = new staffapp({
_id: new mongoose.Types.ObjectId(), _id: new mongoose.Types.ObjectId(),
userID: user.id, userID: user.id,
uuid: uuid, uuid: uuid,
}); })
await newStaffApp.save(); await newStaffApp.save()
await user.deleteDM(); await user.deleteDM();
const channel = guild.channels.cache.get(staffApplicationsChannel); const channel = guild.channels.cache.get(staffApplicationsChannel);
await channel.send({ await channel.send({
embeds: [ embeds: [{
{
title: user.username + "#" + user.discriminator + " - Staff Application", title: user.username + "#" + user.discriminator + " - Staff Application",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: user.avatarURL(), url: user.avatarURL()
}, },
fields: [ fields: [
{ {
name: rsq1, name: rsq1,
value: "```" + answer1_1 + "```", value: "```" + answer1_1 + "```"
}, },
{ {
name: rsq2, name: rsq2,
value: "```" + answer2_1 + "```", value: "```" + answer2_1 + "```"
}, },
{ {
name: rsq3, name: rsq3,
value: "```" + answer3_1 + "```", value: "```" + answer3_1 + "```"
}, },
{ {
name: rsq4, name: rsq4,
value: "```" + answer4_1 + "```", value: "```" + answer4_1 + "```"
}, },
{ {
name: rsq5, name: rsq5,
value: "```" + answer5_1 + "```", value: "```" + answer5_1 + "```"
}, },
{ {
name: rsq6, name: rsq6,
value: "```" + answer6_1 + "```", value: "```" + answer6_1 + "```"
}, }
], ],
footer: { footer: {
iconURL: guild.iconURL(), iconURL: guild.iconURL(),
text: "ID: " + user.id, text: "ID: " + user.id
}, }
}, }],
],
components: [ components: [
new ActionRowBuilder().addComponents( new ActionRowBuilder().addComponents(
new ButtonBuilder() new ButtonBuilder()
@@ -485,10 +427,11 @@ module.exports = {
new ButtonBuilder() new ButtonBuilder()
.setCustomId("staffapplicationdeny") .setCustomId("staffapplicationdeny")
.setLabel("Deny") .setLabel("Deny")
.setStyle(ButtonStyle.Danger), .setStyle(ButtonStyle.Danger)
), )
], ]
});
} }
}, );
}; }
}
}

View File

@@ -1,12 +1,13 @@
const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require("discord.js"); const { ModalBuilder, ActionRowBuilder, TextInputBuilder, TextInputStyle } = require('discord.js')
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json')
module.exports = { module.exports = {
name: "verify", name: 'verify',
description: "Configure the bot.", description: 'Configure the bot.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
const modal = new ModalBuilder() const modal = new ModalBuilder()
.setTitle("Verification") .setTitle("Verification")
.setCustomId("verifybox") .setCustomId("verifybox")
@@ -19,9 +20,9 @@ module.exports = {
.setPlaceholder("Enter your ign.") .setPlaceholder("Enter your ign.")
.setRequired(true) .setRequired(true)
.setMinLength(3) .setMinLength(3)
.setMaxLength(16), .setMaxLength(16)
), )
); )
await interaction.showModal(modal); await interaction.showModal(modal)
}, }
}; }

View File

@@ -1,50 +1,53 @@
const mongoose = require("mongoose"); const mongoose = require('mongoose');
const waitinglist = require("../../schemas/waitinglistSchema.js"); const waitinglist = require('../../schemas/waitinglistSchema.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const key = process.env.HYPIXELAPIKEY; const key = process.env.HYPIXELAPIKEY;
const { hypixelGuildID } = require("../../config/options.json"); const { hypixelGuildID } = require("../../config/options.json")
const fetch = require("axios"); const fetch = require("axios");
module.exports = { module.exports = {
name: "waitinglistupdate", name: 'waitinglistupdate',
description: "Update the waiting list.", description: 'Update the waiting list.',
type: "button", type: 'button',
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true }); await interaction.deferReply({ ephemeral: true });
const user = interaction.user; const user = interaction.user;
const message = interaction.message; const message = interaction.message;
const embed = message.embeds[0]; const embed = message.embeds[0];
const accepted = await waitinglist.find(); const accepted = await waitinglist.find()
const guildAPI = "https://api.hypixel.net/guild"; const guildAPI = "https://api.hypixel.net/guild"
const guild = guildAPI + "?key=" + key + "&player="; const guild = guildAPI + "?key=" + key + "&player="
for (let i = 0; i < accepted.length; i++) { for (let i = 0; i < accepted.length; i++) {
const uuid = accepted[i].uuid;
const check = await fetch(guild + uuid); const uuid = accepted[i].uuid
const check = await fetch(guild + uuid)
if (check.data.guild._id === hypixelGuildID) { if (check.data.guild._id === hypixelGuildID) {
await waitinglist.findOneAndDelete({ uuid: uuid }); await waitinglist.findOneAndDelete({ uuid: uuid })
continue; continue
} }
} }
let fields = []; let fields = [];
for (let i = 0; i < accepted.length; i++) { for (let i = 0; i < accepted.length; i++) {
const timestamp1 = accepted[i].timestamp / 1000;
const timestamp = Math.floor(timestamp1); const timestamp1 = accepted[i].timestamp / 1000
const timestamp = Math.floor(timestamp1)
fields.push({ fields.push({
name: `${i + 1}. ${accepted[i].IGN}`, name: `${i + 1}. ${accepted[i].IGN}`,
value: `TS: <t:${timestamp}:R>`, value: `TS: <t:${timestamp}:R>`
}); });
} }
await message.edit({ await message.edit({
embeds: [ embeds: [{
{
title: embed.title, title: embed.title,
description: embed.description, description: embed.description,
color: embed.color, color: embed.color,
@@ -55,10 +58,9 @@ module.exports = {
thumbnail: embed.thumbnail, thumbnail: embed.thumbnail,
fields: fields, fields: fields,
timestamp: new Date(), timestamp: new Date(),
}, }],
],
}); });
await interaction.editReply({ content: "Updated the waiting list", ephemeral: true }); await interaction.editReply({ content: 'Updated the waiting list', ephemeral: true });
}, }
}; }

View File

@@ -1,16 +1,17 @@
const { InteractionType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); const { InteractionType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const mongoose = require("mongoose"); const mongoose = require('mongoose');
const guildapp = require("../../schemas/guildAppSchema.js"); const guildapp = require('../../schemas/guildAppSchema.js');
const fs = require("fs"); const fs = require('fs');
const path = require("path"); const path = require('path');
module.exports = { module.exports = {
name: "denyreasonbox", name: 'denyreasonbox',
description: "Deny reason box.", description: 'Deny reason box.',
type: "modal", type: 'modal',
async execute(interaction) { async execute(interaction) {
if (interaction.type !== InteractionType.ModalSubmit) return; if (interaction.type !== InteractionType.ModalSubmit) return;
if (interaction.customId !== "denyreasonbox") return; if (interaction.customId !== "denyreasonbox") return;
@@ -23,7 +24,7 @@ module.exports = {
const applicantId = embed.footer.text.split(" ")[1]; const applicantId = embed.footer.text.split(" ")[1];
const applicant = await guild.members.fetch(applicantId); const applicant = await guild.members.fetch(applicantId);
const reason = interaction.fields.fields.get("denyreason").value || "No reason provided"; const reason = interaction.fields.fields.get('denyreason').value || "No reason provided";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const filePath = path.join(__dirname, `../../apps/guild/${applicantId}`); const filePath = path.join(__dirname, `../../apps/guild/${applicantId}`);
@@ -44,15 +45,14 @@ module.exports = {
.setCustomId("checkstats") .setCustomId("checkstats")
.setLabel("Check Stats") .setLabel("Check Stats")
.setStyle(ButtonStyle.Secondary) .setStyle(ButtonStyle.Secondary)
.setDisabled(true), .setDisabled(true)
), )
], ]
}); });
const dmMessage = new EmbedBuilder() const dmMessage = new EmbedBuilder()
.setDescription( .setDescription("Your application for the Illegitimate guild has been denied\n" +
"Your application for the Illegitimate guild has been denied\n" + "**Reason:** `" + reason + "`", "**Reason:** `" + reason + "`")
)
.setColor(embedColor); .setColor(embedColor);
await applicant.send({ embeds: [dmMessage] }); await applicant.send({ embeds: [dmMessage] });
@@ -60,26 +60,19 @@ module.exports = {
await guildapp.findOneAndDelete({ userID: applicantId }); await guildapp.findOneAndDelete({ userID: applicantId });
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: "Application Denied", title: "Application Denied",
description: description: "The application has been denied by <@" + interaction.user.id + ">.\n" +
"The application has been denied by <@" + "**Reason:** `" + reason + "`",
interaction.user.id +
">.\n" +
"**Reason:** `" +
reason +
"`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: applicant.avatarURL(), url: applicant.avatarURL()
}, },
footer: { footer: {
iconURL: guild.iconURL(), iconURL: guild.iconURL(),
text: "ID: " + applicant.id, text: "ID: " + applicant.id
}, }
}, }],
],
}); });
}, }
}; }

View File

@@ -1,16 +1,17 @@
const { InteractionType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js"); const { InteractionType, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require('discord.js');
const { color } = require("../../config/options.json"); const { color } = require('../../config/options.json');
const mongoose = require("mongoose"); const mongoose = require('mongoose');
const staffapp = require("../../schemas/staffAppSchema.js"); const staffapp = require('../../schemas/staffAppSchema.js');
const fs = require("fs"); const fs = require('fs');
const path = require("path"); const path = require('path');
module.exports = { module.exports = {
name: "staffdenyreasonbox", name: 'staffdenyreasonbox',
description: "Deny reason box.", description: 'Deny reason box.',
type: "modal", type: 'modal',
async execute(interaction) { async execute(interaction) {
if (interaction.type !== InteractionType.ModalSubmit) return; if (interaction.type !== InteractionType.ModalSubmit) return;
if (interaction.customId !== "staffdenyreasonbox") return; if (interaction.customId !== "staffdenyreasonbox") return;
@@ -18,13 +19,13 @@ module.exports = {
const channel = interaction.channel; const channel = interaction.channel;
const guild = interaction.guild; const guild = interaction.guild;
const reason = interaction.fields.fields.get("staffdenyreason").value || "No reason provided"; const reason = interaction.fields.fields.get('staffdenyreason').value || "No reason provided";
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace("#", "0x"));
const message = interaction.message; const message = interaction.message;
const embed = message.embeds[0]; const embed = message.embeds[0];
const applicantId = embed.footer.text.split(" ")[1]; const applicantId = embed.footer.text.split(" ")[1]
const applicant = await guild.members.fetch(applicantId); const applicant = await guild.members.fetch(applicantId)
await message.edit({ await message.edit({
components: [ components: [
@@ -39,14 +40,13 @@ module.exports = {
.setLabel("Deny") .setLabel("Deny")
.setStyle(ButtonStyle.Danger) .setStyle(ButtonStyle.Danger)
.setDisabled(true), .setDisabled(true),
), )
], ]
}); });
const dmMessage = new EmbedBuilder() const dmMessage = new EmbedBuilder()
.setDescription( .setDescription("Your application for the Illegitimate guild staff has been denied\n" +
"Your application for the Illegitimate guild staff has been denied\n" + "**Reason:** `" + reason + "`", "**Reason:** `" + reason + "`")
)
.setColor(embedColor); .setColor(embedColor);
await applicant.send({ embeds: [dmMessage] }); await applicant.send({ embeds: [dmMessage] });
@@ -54,26 +54,19 @@ module.exports = {
await staffapp.findOneAndDelete({ userID: applicantId }); await staffapp.findOneAndDelete({ userID: applicantId });
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [{
{
title: "Application Denied", title: "Application Denied",
description: description: "The application has been denied by <@" + interaction.user.id + ">.\n" +
"The application has been denied by <@" + "**Reason:** `" + reason + "`",
interaction.user.id +
">.\n" +
"**Reason:** `" +
reason +
"`",
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: applicant.avatarURL(), url: applicant.avatarURL()
}, },
footer: { footer: {
iconURL: guild.iconURL(), iconURL: guild.iconURL(),
text: "ID: " + applicant.id, text: "ID: " + applicant.id
}, }
}, }],
], });;
}); }
}, }
};

133
index.js
View File

@@ -1,21 +1,21 @@
const { Client, GatewayIntentBits, Partials, ActivityType, Events, Collection } = require("discord.js"); const { Client, GatewayIntentBits, Partials, ActivityType, Events, Collection } = require('discord.js');
const { botLogChannel, color } = require("./config/options.json"); const { botLogChannel, color } = require('./config/options.json');
const env = require("dotenv").config(); const env = require('dotenv').config();
const token = process.env.TOKEN; const token = process.env.TOKEN;
const mongoURI = process.env.MONGOURI; const mongoURI = process.env.MONGOURI;
const { connect } = require("mongoose"); const { connect } = require('mongoose');
const path = require("path"); const path = require('path');
const fs = require("fs"); const fs = require('fs');
const client = new Client({ const client = new Client({
intents: [ intents: [
GatewayIntentBits.Guilds, GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMembers, GatewayIntentBits.MessageContent,
GatewayIntentBits.GuildMembers, GatewayIntentBits.DirectMessages
GatewayIntentBits.MessageContent,
GatewayIntentBits.DirectMessages,
], ],
partials: [Partials.GuildMember, Partials.User, Partials.Message, Partials.Channel], partials: [
Partials.GuildMember, Partials.User, Partials.Message, Partials.Channel
]
}); });
client.commands = new Collection(); client.commands = new Collection();
@@ -23,14 +23,15 @@ client.events = new Collection();
client.modals = new Collection(); client.modals = new Collection();
//! commands //! commands
const cmdPath = path.join(__dirname, "commands"); const cmdPath = path.join(__dirname, 'commands');
const cmdFiles = fs.readdirSync(cmdPath).filter((file) => file.endsWith(".js")); const cmdFiles = fs.readdirSync(cmdPath).filter(file => file.endsWith('.js'));
for (const file of cmdFiles) { for (const file of cmdFiles) {
const filePath = path.join(cmdPath, file); const filePath = path.join(cmdPath, file);
const cmd = require(filePath); const cmd = require(filePath);
if ("data" in cmd && "execute" in cmd && cmd.type === "slash") { if ('data' in cmd && 'execute' in cmd && cmd.type === 'slash') {
client.commands.set(cmd.data.name, cmd); client.commands.set(cmd.data.name, cmd);
} else { } else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`); console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`);
@@ -38,14 +39,16 @@ for (const file of cmdFiles) {
} }
//! commands testing //! commands testing
const cmdTestPath = path.join(__dirname, "commands-testing"); const cmdTestPath = path.join(__dirname, 'commands-testing');
const cmdTestFiles = fs.readdirSync(cmdTestPath).filter((file) => file.endsWith(".js")); const cmdTestFiles =
fs.readdirSync(cmdTestPath).filter(file => file.endsWith('.js'));
for (const file of cmdTestFiles) { for (const file of cmdTestFiles) {
const filePath = path.join(cmdTestPath, file); const filePath = path.join(cmdTestPath, file);
const cmd = require(filePath); const cmd = require(filePath);
if ("data" in cmd && "execute" in cmd && cmd.type === "slash") { if ('data' in cmd && 'execute' in cmd && cmd.type === 'slash') {
client.commands.set(cmd.data.name, cmd); client.commands.set(cmd.data.name, cmd);
} else { } else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`); console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`);
@@ -53,8 +56,9 @@ for (const file of cmdTestFiles) {
} }
//! command handler //! command handler
client.on(Events.InteractionCreate, async (interaction) => { client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isChatInputCommand()) return; if (!interaction.isChatInputCommand())
return;
const command = interaction.client.commands.get(interaction.commandName); const command = interaction.client.commands.get(interaction.commandName);
@@ -68,21 +72,23 @@ client.on(Events.InteractionCreate, async (interaction) => {
} catch (error) { } catch (error) {
console.error(error); console.error(error);
await interaction.reply({ await interaction.reply({
content: "There was an error while executing this command!", content: 'There was an error while executing this command!',
ephemeral: true, ephemeral: true
}); })
} }
}); });
//! commands //! commands
const contextMenuPath = path.join(__dirname, "commands-contextmenu"); const contextMenuPath = path.join(__dirname, 'commands-contextmenu');
const contextMenuFiles = fs.readdirSync(contextMenuPath).filter((file) => file.endsWith(".js")); const contextMenuFiles =
fs.readdirSync(contextMenuPath).filter(file => file.endsWith('.js'));
for (const file of contextMenuFiles) { for (const file of contextMenuFiles) {
const filePath = path.join(contextMenuPath, file); const filePath = path.join(contextMenuPath, file);
const cmd = require(filePath); const cmd = require(filePath);
if ("data" in cmd && "execute" in cmd && cmd.type === "contextmenu") { if ('data' in cmd && 'execute' in cmd && cmd.type === 'contextmenu') {
client.commands.set(cmd.data.name, cmd); client.commands.set(cmd.data.name, cmd);
} else { } else {
console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`); console.log(`[WARNING] The command at ${filePath} is missing a required "data", "execute" or "type" property.`);
@@ -90,8 +96,9 @@ for (const file of contextMenuFiles) {
} }
//! context menu command handler //! context menu command handler
client.on(Events.InteractionCreate, async (interaction) => { client.on(Events.InteractionCreate, async interaction => {
if (!interaction.isContextMenuCommand()) return; if (!interaction.isContextMenuCommand())
return;
const command = interaction.client.commands.get(interaction.commandName); const command = interaction.client.commands.get(interaction.commandName);
@@ -105,21 +112,22 @@ client.on(Events.InteractionCreate, async (interaction) => {
} catch (error) { } catch (error) {
console.error(error); console.error(error);
await interaction.reply({ await interaction.reply({
content: "There was an error while executing this command!", content: 'There was an error while executing this command!',
ephemeral: true, ephemeral: true
}); })
} }
}); });
//! button events //! button events
const btnPath = path.join(__dirname, "events", "buttons"); const btnPath = path.join(__dirname, 'events', 'buttons');
const btnFiles = fs.readdirSync(btnPath).filter((file) => file.endsWith(".js")); const btnFiles = fs.readdirSync(btnPath).filter(file => file.endsWith('.js'));
for (const file of btnFiles) { for (const file of btnFiles) {
const filePath = path.join(btnPath, file); const filePath = path.join(btnPath, file);
const btn = require(filePath); const btn = require(filePath);
if ("name" in btn && "execute" in btn && btn.type === "button") { if ('name' in btn && 'execute' in btn && btn.type === 'button') {
client.events.set(btn.name, btn); client.events.set(btn.name, btn);
} else { } else {
console.log(`[WARNING] The button at ${filePath} is missing a required "name", "execute" or "type" property.`); console.log(`[WARNING] The button at ${filePath} is missing a required "name", "execute" or "type" property.`);
@@ -127,8 +135,9 @@ for (const file of btnFiles) {
} }
//! button event handler //! button event handler
client.on(Events.InteractionCreate, async (event) => { client.on(Events.InteractionCreate, async event => {
if (!event.isButton()) return; if (!event.isButton())
return;
const event2 = event.client.events.get(event.customId); const event2 = event.client.events.get(event.customId);
@@ -142,53 +151,57 @@ client.on(Events.InteractionCreate, async (event) => {
} catch (error) { } catch (error) {
console.error(error); console.error(error);
await event.reply({ await event.reply({
content: "There was an error while executing this event!", content: 'There was an error while executing this event!',
ephemeral: true, ephemeral: true
}); })
} }
}); })
//! modals //! modals
const modalPath = path.join(__dirname, "events", "modals"); const modalPath = path.join(__dirname, 'events', 'modals');
const modalFiles = fs.readdirSync(modalPath).filter((file) => file.endsWith(".js")); const modalFiles =
fs.readdirSync(modalPath).filter(file => file.endsWith('.js'));
for (const file of modalFiles) { for (const file of modalFiles) {
const filePath = path.join(modalPath, file); const filePath = path.join(modalPath, file);
const modal = require(filePath); const modal = require(filePath);
if ("name" in modal && "execute" in modal && modal.type === "modal") { if ('name' in modal && 'execute' in modal && modal.type === 'modal') {
client.on(Events.InteractionCreate, modal.execute); client.on(Events.InteractionCreate, modal.execute);
} else { } else {
console.log(`[WARNING] The modal at ${filePath} is missing a required "name", "execute" or "type" property.`); console.log(`[WARNING] The modal at ${filePath} is missing a required "name", "execute" or "type" property.`);
} }
} }
client.on(Events.InteractionCreate, async (interaction) => { client.on(Events.InteractionCreate, async interaction => {
if (interaction.isCommand()) { if (interaction.isCommand()) {
console.log( console.log(interaction.user.username + "#" +
interaction.user.username + "#" + interaction.user.discriminator + " ran " + interaction.commandName, interaction.user.discriminator + " ran " +
); interaction.commandName);
} else if (interaction.isButton()) { } else if (interaction.isButton()) {
console.log( console.log(interaction.user.username + "#" +
interaction.user.username + "#" + interaction.user.discriminator + " clicked " + interaction.customId, interaction.user.discriminator + " clicked " +
); interaction.customId);
} }
}); });
client.on(Events.ClientReady, () => { client.on(Events.ClientReady, () => {
console.log("Logged in as " + client.user.tag + "!"); console.log("Logged in as " + client.user.tag + "!");
const channel = client.channels.cache.get(botLogChannel); const channel = client.channels.cache.get(botLogChannel);
const embedColor = Number(color.replace("#", "0x")); const embedColor = Number(color.replace('#', '0x'))
if (!channel) { if (!channel) {
return; return;
} }
channel.send({ embeds: [{ description: `Bot is online!`, color: embedColor }] }); channel.send(
{ embeds: [{ description: `Bot is online!`, color: embedColor }] });
}); });
client.on(Events.ClientReady, () => { client.on(Events.ClientReady, () => {
client.user.setActivity({ name: "over the Illegitimate Server", type: ActivityType.Watching }); client.user.setActivity(
{ name: "over the Illegitimate Server", type: ActivityType.Watching });
const activities = [ const activities = [
{ name: "for Martina's return", type: ActivityType.Watching }, { name: "for Martina's return", type: ActivityType.Watching },
@@ -197,17 +210,17 @@ client.on(Events.ClientReady, () => {
{ name: "with Perlcence the AI", type: ActivityType.Playing }, { name: "with Perlcence the AI", type: ActivityType.Playing },
{ name: "with ur mom in my bed", type: ActivityType.Playing }, { name: "with ur mom in my bed", type: ActivityType.Playing },
{ name: "with Jone the idiot", type: ActivityType.Playing }, { name: "with Jone the idiot", type: ActivityType.Playing },
{ name: "over the Illegitimate Server", type: ActivityType.Watching }, { name: "over the Illegitimate Server", type: ActivityType.Watching }
]; ];
let i = 0; let i = 0;
setInterval(() => client.user.setActivity(activities[i++ % activities.length]), 1000 * 60 * 30); setInterval(() =>
}); client.user.setActivity(activities[i++ % activities.length]),
client.on(Events.ClientReady, () => { 1000 * 60 * 30)
client.user.setStatus("dnd");
}); });
client.on(Events.ClientReady, () => { client.user.setStatus('dnd'); });
client.login(token); client.login(token);
connect(mongoURI, {}).then(() => { connect(mongoURI, {}).then(() => {
console.log("Connected to MongoDB"); console.log('Connected to MongoDB');
}); })

View File

@@ -1,4 +1,4 @@
const { Schema, model } = require("mongoose"); const { Schema, model } = require('mongoose');
const guildAppSchema = new Schema({ const guildAppSchema = new Schema({
_id: Schema.Types.ObjectId, _id: Schema.Types.ObjectId,
@@ -6,4 +6,4 @@ const guildAppSchema = new Schema({
uuid: { type: String, required: true }, uuid: { type: String, required: true },
}); });
module.exports = model("guildapp", guildAppSchema, "guildapp"); module.exports = model('guildapp', guildAppSchema, 'guildapp');

View File

@@ -1,4 +1,4 @@
const { Schema, model } = require("mongoose"); const { Schema, model } = require('mongoose');
const staffAppSchema = new Schema({ const staffAppSchema = new Schema({
_id: Schema.Types.ObjectId, _id: Schema.Types.ObjectId,
@@ -6,4 +6,4 @@ const staffAppSchema = new Schema({
uuid: { type: String, required: true }, uuid: { type: String, required: true },
}); });
module.exports = model("staffapp", staffAppSchema, "staffapp"); module.exports = model('staffapp', staffAppSchema, 'staffapp');

View File

@@ -1,4 +1,4 @@
const { Schema, model } = require("mongoose"); const { Schema, model } = require('mongoose');
const verifySchema = new Schema({ const verifySchema = new Schema({
_id: Schema.Types.ObjectId, _id: Schema.Types.ObjectId,
@@ -6,4 +6,4 @@ const verifySchema = new Schema({
uuid: { type: String, required: true }, uuid: { type: String, required: true },
}); });
module.exports = model("verify", verifySchema, "verify"); module.exports = model('verify', verifySchema, 'verify');

View File

@@ -1,11 +1,11 @@
const { Schema, model } = require("mongoose"); const { Schema, model } = require('mongoose');
const waitinglistSchema = new Schema({ const waitinglistSchema = new Schema({
_id: Schema.Types.ObjectId, _id: Schema.Types.ObjectId,
userID: { type: String, required: true }, userID: { type: String, required: true },
uuid: { type: String, required: true }, uuid: { type: String, required: true },
IGN: { type: String, required: true }, IGN: { type: String, required: true },
timestamp: { type: String, required: true }, timestamp: { type: String, required: true }
}); });
module.exports = model("waitinglist", waitinglistSchema, "waitinglist"); module.exports = model('waitinglist', waitinglistSchema, 'waitinglist');

View File

@@ -1,19 +1,20 @@
const { REST, Routes } = require("discord.js"); const { REST, Routes } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const token = process.env.PRODTOKEN; const token = process.env.PRODTOKEN;
const clientId = process.env.CLIENTID; const clientId = process.env.CLIENTID;
const guildId = process.env.GUILDID; const guildId = process.env.GUILDID;
const fs = require("node:fs"); const fs = require('node:fs');
const args = process.argv.slice(2); const args = process.argv.slice(2);
const arg = args[0]; const arg = args[0];
if (!arg) { if (!arg) {
console.log("Please specify a command to run!"); console.log('Please specify a command to run!');
} else if (arg === "--prod") { }
else if (arg === '--prod') {
const commands = []; const commands = [];
// Grab all the command files from the commands directory you created earlier // Grab all the command files from the commands directory you created earlier
const commandFiles = fs.readdirSync("./commands").filter((file) => file.endsWith(".js")); const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
const contentMenuCommands = fs.readdirSync("./commands-contextmenu").filter((file) => file.endsWith(".js")); const contentMenuCommands = fs.readdirSync('./commands-contextmenu').filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) { for (const file of commandFiles) {
@@ -27,7 +28,8 @@ if (!arg) {
} }
// Construct and prepare an instance of the REST module // Construct and prepare an instance of the REST module
const rest = new REST({ version: "10" }).setToken(token); const rest = new REST({ version: '10' }).setToken(token);
// and deploy your commands! // and deploy your commands!
(async () => { (async () => {
@@ -35,7 +37,10 @@ if (!arg) {
console.log(`Started refreshing ${commands.length} application (/) commands.`); console.log(`Started refreshing ${commands.length} application (/) commands.`);
// The put method is used to fully refresh all commands in the guild with the current set // The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(Routes.applicationCommands(clientId), { body: commands }); const data = await rest.put(
Routes.applicationCommands(clientId),
{ body: commands },
);
console.log(`Successfully reloaded ${data.length} application (/) commands.`); console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) { } catch (error) {
@@ -43,10 +48,11 @@ if (!arg) {
console.error(error); console.error(error);
} }
})(); })();
} else if (arg === "--dev") { }
else if (arg === '--dev') {
const commands = []; const commands = [];
// Grab all the command files from the commands directory you created earlier // Grab all the command files from the commands directory you created earlier
const commandFiles = fs.readdirSync("./commands-testing").filter((file) => file.endsWith(".js")); const commandFiles = fs.readdirSync('./commands-testing').filter(file => file.endsWith('.js'));
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) { for (const file of commandFiles) {
@@ -55,7 +61,8 @@ if (!arg) {
} }
// Construct and prepare an instance of the REST module // Construct and prepare an instance of the REST module
const rest = new REST({ version: "10" }).setToken(token); const rest = new REST({ version: '10' }).setToken(token);
// and deploy your commands! // and deploy your commands!
(async () => { (async () => {
@@ -63,7 +70,10 @@ if (!arg) {
console.log(`Started refreshing ${commands.length} application (/) commands.`); console.log(`Started refreshing ${commands.length} application (/) commands.`);
// The put method is used to fully refresh all commands in the guild with the current set // The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands }); const data = await rest.put(
Routes.applicationGuildCommands(clientId, guildId),
{ body: commands },
);
console.log(`Successfully reloaded ${data.length} application (/) commands.`); console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) { } catch (error) {
@@ -71,6 +81,7 @@ if (!arg) {
console.error(error); console.error(error);
} }
})(); })();
} else if (arg && arg !== "--prod" && arg !== "--dev") { }
console.log("Invalid argument!"); else if (arg && arg !== '--prod' && arg !== '--dev') {
console.log('Invalid argument!');
} }

View File

@@ -1,5 +1,5 @@
const { REST, Routes } = require("discord.js"); const { REST, Routes } = require('discord.js');
const env = require("dotenv").config(); const env = require('dotenv').config();
const token = process.env.TOKEN; const token = process.env.TOKEN;
const clientId = process.env.DEVID; const clientId = process.env.DEVID;
const guildId = process.env.GUILDID; const guildId = process.env.GUILDID;
@@ -8,7 +8,9 @@ const commands = [];
// Grab all the command files from the commands directory you created earlier // Grab all the command files from the commands directory you created earlier
// const commandFiles = fs.readdirSync('./commands-testing').filter(file => file.endsWith('.js')); // const commandFiles = fs.readdirSync('./commands-testing').filter(file => file.endsWith('.js'));
const commandFiles = ["./commands/config.js"]; const commandFiles = [
'./commands/config.js',
]
// Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment // Grab the SlashCommandBuilder#toJSON() output of each command's data for deployment
for (const file of commandFiles) { for (const file of commandFiles) {
@@ -17,19 +19,23 @@ for (const file of commandFiles) {
} }
// Construct and prepare an instance of the REST module // Construct and prepare an instance of the REST module
const rest = new REST({ version: "10" }).setToken(token); const rest = new REST({ version: '10' }).setToken(token);
// and deploy your commands! // and deploy your commands!
(async () => { (async () => {
try { try {
console.log(`Started refreshing ${commands.length} application (/) commands.`); console.log(`Started refreshing ${commands.length} application (/) commands.`);
// The put method is used to fully refresh all commands in the guild with the current set // The put method is used to fully refresh all commands in the guild with the current set
const data = await rest.put(Routes.applicationGuildCommands(clientId, guildId), { body: commands }); const data = await rest.put(
Routes.applicationGuildCommands(clientId, guildId),
{ body: commands },
);
console.log(`Successfully reloaded ${data.length} application (/) commands.`); console.log(`Successfully reloaded ${data.length} application (/) commands.`);
} catch (error) { } catch (error) {
// And of course, make sure you catch and log any errors! // And of course, make sure you catch and log any errors!
console.error(error); console.error(error);
} }
})(); })();

View File

@@ -1,13 +1,13 @@
/* ---------- bedwars level ---------- */ /* ---------- bedwars level ---------- */
function getExpForLevel(level) { function getExpForLevel(level){
if (level == 0) return 0; if(level == 0) return 0;
var respectedLevel = getLevelRespectingPrestige(level); var respectedLevel = getLevelRespectingPrestige(level);
if (respectedLevel > EASY_LEVELS) { if(respectedLevel > EASY_LEVELS){
return 5000; return 5000;
} }
switch (respectedLevel) { switch(respectedLevel){
case 1: case 1:
return 500; return 500;
case 2: case 2:
@@ -20,10 +20,11 @@ function getExpForLevel(level) {
return 5000; return 5000;
} }
function getLevelRespectingPrestige(level) { function getLevelRespectingPrestige(level){
if (level > HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE) { if(level > HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE){
return level - HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE; return level - HIGHEST_PRESTIGE * LEVELS_PER_PRESTIGE;
} else { }
else {
return level % LEVELS_PER_PRESTIGE; return level % LEVELS_PER_PRESTIGE;
} }
} }
@@ -32,20 +33,20 @@ const EASY_LEVELS_XP = 7000;
const XP_PER_PRESTIGE = 96 * 5000 + EASY_LEVELS_XP; const XP_PER_PRESTIGE = 96 * 5000 + EASY_LEVELS_XP;
const LEVELS_PER_PRESTIGE = 100; const LEVELS_PER_PRESTIGE = 100;
const HIGHEST_PRESTIGE = 50; const HIGHEST_PRESTIGE = 50;
function getLevelForExp(exp) { function getLevelForExp(exp){
var prestiges = Math.floor(exp / XP_PER_PRESTIGE); var prestiges = Math.floor(exp / XP_PER_PRESTIGE);
var level = prestiges * LEVELS_PER_PRESTIGE; var level = prestiges * LEVELS_PER_PRESTIGE;
var expWithoutPrestiges = exp - prestiges * XP_PER_PRESTIGE; var expWithoutPrestiges = exp - (prestiges * XP_PER_PRESTIGE);
for (let i = 1; i <= EASY_LEVELS; ++i) { for(let i = 1; i <= EASY_LEVELS; ++i){
var expForEasyLevel = getExpForLevel(i); var expForEasyLevel = getExpForLevel(i);
if (expWithoutPrestiges < expForEasyLevel) { if(expWithoutPrestiges < expForEasyLevel){
break; break;
} }
level++; level++;
expWithoutPrestiges -= expForEasyLevel; expWithoutPrestiges -= expForEasyLevel;
} }
return level + expWithoutPrestiges / 5000; return level + expWithoutPrestiges / 5000
} }
// hypixel // hypixel
const BASE = 10000; const BASE = 10000;
@@ -69,8 +70,8 @@ function getExpFromLevelToNext(level) {
} }
function getTotalExpToLevel(level) { function getTotalExpToLevel(level) {
const lv = Math.floor(level); const lv = Math.floor(level); const
const x0 = getTotalExpToFullLevel(lv); x0 = getTotalExpToFullLevel(lv);
if (level === lv) return x0; if (level === lv) return x0;
return (getTotalExpToFullLevel(lv + 1) - x0) * (level % 1) + x0; return (getTotalExpToFullLevel(lv + 1) - x0) * (level % 1) + x0;
} }
@@ -87,14 +88,14 @@ function getPercentageToNextLevel(exp) {
/* ---------- skywars level ---------- */ /* ---------- skywars level ---------- */
function skywarsLevel(xp) { function skywarsLevel(xp) {
var xps = [0, 20, 70, 150, 250, 500, 1000, 2000, 3500, 6000, 10000, 15000]; var xps = [0, 20, 70, 150, 250, 500, 1000, 2000, 3500, 6000, 10000, 15000];
let exactLevel = 0; let exactLevel = 0
if (xp >= 15000) { if (xp >= 15000) {
exactLevel = (xp - 15000) / 10000 + 12; exactLevel = (xp - 15000) / 10000 + 12;
return exactLevel; return exactLevel;
} else { } else {
for (i = 0; i < xps.length; i++) { for (i = 0; i < xps.length; i++) {
if (xp < xps[i]) { if (xp < xps[i]) {
exactLevel = i + (xp - xps[i - 1]) / (xps[i] - xps[i - 1]); exactLevel = i + (xp - xps[i-1]) / (xps[i] - xps[i-1]);
return exactLevel; return exactLevel;
} }
} }
@@ -104,5 +105,5 @@ function skywarsLevel(xp) {
module.exports = { module.exports = {
getExactLevel, getExactLevel,
skywarsLevel, skywarsLevel,
getLevelForExp, getLevelForExp
}; }