Skip to content

Commit 1784de4

Browse files
authored
Merge pull request #291 from Kathund/requirements
Requirements Command
2 parents dcbca75 + ee8244f commit 1784de4

File tree

4 files changed

+201
-148
lines changed

4 files changed

+201
-148
lines changed

config.example.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,15 @@
2828
"autoAccept": false,
2929
"requirements": {
3030
"bedwarsStars": -1,
31-
"bedwarsStarsWithFKDR": -1,
3231
"bedwarsFKDR": -1,
3332

3433
"skywarsStars": -1,
35-
"skywarsStarsWithKDR": -1,
3634
"skywarsKDR": -1,
3735

3836
"duelsWins": -1,
39-
"duelsWinsWithWLR": -1,
4037
"duelsWLR": -1,
4138

4239
"senitherWeight": -1,
43-
"lilyWeight": -1,
4440
"skyblockLevel": -1
4541
}
4642
},
Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
const { getLatestProfile } = require("../../../API/functions/getLatestProfile.js");
2+
const HypixelDiscordChatBridgeError = require("../../contracts/errorHandler.js");
3+
const hypixel = require("../../contracts/API/HypixelRebornAPI.js");
4+
const { getUUID } = require("../../contracts/API/mowojangAPI.js");
5+
const getWeight = require("../../../API/stats/weight.js");
6+
const config = require("../../../config.json");
7+
const { EmbedBuilder } = require("discord.js");
8+
9+
async function checkRequirements(uuid) {
10+
const [player, profile] = await Promise.all([hypixel.getPlayer(uuid), getLatestProfile(uuid)]);
11+
let meetRequirements = false;
12+
13+
const weightData = getWeight(profile.profile, profile.uuid);
14+
const weight = weightData?.senither?.total || 0;
15+
const skyblockLevel = (profile.profile?.leveling?.experience || 0) / 100 ?? 0;
16+
17+
const bwLevel = player.stats.bedwars.level;
18+
const bwFKDR = player.stats.bedwars.finalKDRatio;
19+
20+
const swLevel = player.stats.skywars.level / 5;
21+
const swKDR = player.stats.skywars.KDRatio;
22+
23+
const duelsWins = player.stats.duels.wins;
24+
const dWLR = player.stats.duels.WLRatio;
25+
26+
if (
27+
weight >= config.minecraft.guildRequirements.requirements.senitherWeight &&
28+
config.minecraft.guildRequirements.requirements.senitherWeight > 0
29+
) {
30+
meetRequirements = true;
31+
}
32+
33+
if (
34+
skyblockLevel >= config.minecraft.guildRequirements.requirements.skyblockLevel &&
35+
config.minecraft.guildRequirements.requirements.skyblockLevel > 0
36+
) {
37+
meetRequirements = true;
38+
}
39+
40+
if (
41+
bwLevel >= config.minecraft.guildRequirements.requirements.bedwarsStars &&
42+
config.minecraft.guildRequirements.requirements.bedwarsStars > 0
43+
) {
44+
meetRequirements = true;
45+
}
46+
if (
47+
bwFKDR >= config.minecraft.guildRequirements.requirements.bedwarsFKDR &&
48+
config.minecraft.guildRequirements.requirements.bedwarsFKDR > 0
49+
) {
50+
meetRequirements = true;
51+
}
52+
53+
if (
54+
swLevel >= config.minecraft.guildRequirements.requirements.skywarsStars &&
55+
config.minecraft.guildRequirements.requirements.skywarsStars > 0
56+
) {
57+
meetRequirements = true;
58+
}
59+
60+
if (
61+
swKDR >= config.minecraft.guildRequirements.requirements.skywarsKDR &&
62+
config.minecraft.guildRequirements.requirements.skywarsKDR > 0
63+
) {
64+
meetRequirements = true;
65+
}
66+
67+
if (
68+
duelsWins >= config.minecraft.guildRequirements.requirements.duelsWins &&
69+
config.minecraft.guildRequirements.requirements.duelsWins > 0
70+
) {
71+
meetRequirements = true;
72+
}
73+
74+
if (
75+
dWLR >= config.minecraft.guildRequirements.requirements.duelsWLR &&
76+
config.minecraft.guildRequirements.requirements.duelsWLR > 0
77+
) {
78+
meetRequirements = true;
79+
}
80+
81+
return {
82+
meetRequirements,
83+
level: player.level,
84+
nickname: player.nickname,
85+
weight: weight.toLocaleString(),
86+
skyblockLevel: skyblockLevel.toLocaleString(),
87+
bwLevel: bwLevel.toLocaleString(),
88+
bwFKDR: bwFKDR.toLocaleString(),
89+
swLevel: swLevel.toLocaleString(),
90+
swKDR: swKDR.toLocaleString(),
91+
duelsWins: duelsWins.toLocaleString(),
92+
dWLR: dWLR.toLocaleString(),
93+
};
94+
}
95+
96+
function generateEmbed(data) {
97+
return new EmbedBuilder()
98+
.setColor(data.meetRequirements ? 2067276 : 15548997)
99+
.setTitle(
100+
`${data.nickname} **${data.meetRequirements ? "has" : "hasn't"}** got the requirements to join the Guild!`,
101+
)
102+
.addFields(
103+
{
104+
name: "Bedwars Level",
105+
value: `${data.bwLevel}/${config.minecraft.guildRequirements.requirements.bedwarsStars.toLocaleString()}`,
106+
inline: true,
107+
},
108+
{
109+
name: "Skywars Level",
110+
value: `${data.swLevel}/${config.minecraft.guildRequirements.requirements.skywarsStars.toLocaleString()}`,
111+
inline: true,
112+
},
113+
{
114+
name: "Duels Wins",
115+
value: `${data.duelsWins}/${config.minecraft.guildRequirements.requirements.duelsWins.toLocaleString()}`,
116+
inline: true,
117+
},
118+
{
119+
name: "Bedwars FKDR",
120+
value: `${data.bwFKDR}/${config.minecraft.guildRequirements.requirements.bedwarsFKDR.toLocaleString()}`,
121+
inline: true,
122+
},
123+
{
124+
name: "Skywars KDR",
125+
value: `${data.swKDR}/${config.minecraft.guildRequirements.requirements.skywarsKDR.toLocaleString()}`,
126+
inline: true,
127+
},
128+
{
129+
name: "Duels WLR",
130+
value: `${data.dWLR}/${config.minecraft.guildRequirements.requirements.duelsWLR.toLocaleString()}`,
131+
inline: true,
132+
},
133+
{
134+
name: "Senither Weight",
135+
value: `${data.weight}/${config.minecraft.guildRequirements.requirements.senitherWeight.toLocaleString()}`,
136+
inline: true,
137+
},
138+
{
139+
name: "Skyblock Level",
140+
value: `${data.skyblockLevel}/${config.minecraft.guildRequirements.requirements.skyblockLevel.toLocaleString()}`,
141+
inline: true,
142+
},
143+
)
144+
.setThumbnail(`https://www.mc-heads.net/avatar/${data.nickname}`)
145+
.setFooter({
146+
text: `by @duckysolucky | /help [command] for more information`,
147+
iconURL: "https://imgur.com/tgwQJTX.png",
148+
});
149+
}
150+
151+
module.exports = {
152+
checkRequirements,
153+
generateEmbed,
154+
name: "requirements",
155+
description: "Checks a user's requirements to join the guild.",
156+
options: [
157+
{
158+
name: "username",
159+
description: "minecraft username",
160+
type: 3,
161+
required: false,
162+
},
163+
],
164+
165+
execute: async (interaction) => {
166+
const name = interaction.options.getString("username") || interaction?.member?.nickname || null;
167+
if (name === null) throw new HypixelDiscordChatBridgeError("Please input a username");
168+
const playerInfo = await checkRequirements(await getUUID(name));
169+
const embed = generateEmbed(playerInfo);
170+
await interaction.followUp({ embeds: [embed] });
171+
},
172+
};

src/discord/events/interactionCreate.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const HypixelDiscordChatBridgeError = require("../../contracts/errorHandler.js");
2-
const { ErrorEmbed } = require("../../contracts/embedHandler.js");
2+
const { ErrorEmbed, SuccessEmbed } = require("../../contracts/embedHandler.js");
33
// eslint-disable-next-line no-unused-vars
44
const { CommandInteraction } = require("discord.js");
55
const config = require("../../../config.json");
@@ -23,7 +23,7 @@ module.exports = {
2323
if (command === undefined) {
2424
return;
2525
}
26-
26+
2727
Logger.discordMessage(`${interaction.user.username} - [${interaction.commandName}]`);
2828

2929
if (command.verificationCommand === true && config.verification.enabled === false) {
@@ -39,6 +39,15 @@ module.exports = {
3939
}
4040

4141
await command.execute(interaction);
42+
} else if (interaction.isButton()) {
43+
await interaction.deferReply({ ephemeral: true }).catch(() => {});
44+
if (interaction.customId !== "joinRequestAccept") return;
45+
const username = interaction?.message?.embeds?.[0]?.title.split(" ")?.[0] || undefined;
46+
if (!username) throw new HypixelDiscordChatBridgeError("Something is missing");
47+
bot.chat(`/g accept ${username}`);
48+
const embed = new SuccessEmbed(`Successfully accepted **${username}** into the guild.`);
49+
50+
await interaction.followUp({ embeds: [embed] });
4251
}
4352
} catch (error) {
4453
console.log(error);

0 commit comments

Comments
 (0)