Merge branch 'dev' into 'main'

Dev

See merge request illegitimate/illegitimate-bot!149
This commit is contained in:
2023-12-31 10:39:06 +00:00
30 changed files with 1133 additions and 222 deletions

View File

@@ -1,10 +1,13 @@
module.exports = { module.exports = {
"env": { "env": {
"node": true, "node": true,
"commonjs": true, "es2021": true,
"es2021": true "browser": true
}, },
"extends": "eslint:recommended", "extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended"
],
"overrides": [ "overrides": [
{ {
"env": { "env": {
@@ -18,9 +21,14 @@ module.exports = {
} }
} }
], ],
"parser": "@typescript-eslint/parser",
"parserOptions": { "parserOptions": {
"ecmaVersion": "latest" "ecmaVersion": "latest",
"sourceType": "module"
}, },
"plugins": [
"@typescript-eslint"
],
"rules": { "rules": {
"indent": [ "indent": [
"error", "error",
@@ -60,5 +68,7 @@ module.exports = {
"asyncArrow": "always" "asyncArrow": "always"
}], }],
"comma-spacing": "error", "comma-spacing": "error",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/no-explicit-any": "off"
} }
} }

View File

@@ -3,4 +3,4 @@ FROM node:20.9.0-alpine3.18
COPY package.json ./ COPY package.json ./
COPY yarn.lock ./ COPY yarn.lock ./
RUN yarn install RUN yarn install --production

View File

@@ -12,8 +12,8 @@
"dev:build": "ts-node scripts/dev-deploy.ts", "dev:build": "ts-node scripts/dev-deploy.ts",
"dev:delete": "ts-node scripts/delete-commands.ts", "dev:delete": "ts-node scripts/delete-commands.ts",
"format": "prettier --write src/", "format": "prettier --write src/",
"lint": "eslint_d src", "lint": "eslint src",
"lint:fix": "eslint_d --fix src", "lint:fix": "eslint --fix src",
"prod:build": "ts-node scripts/deploy-commands.ts" "prod:build": "ts-node scripts/deploy-commands.ts"
}, },
"author": "Taken", "author": "Taken",
@@ -26,13 +26,16 @@
"ioredis": "^5.3.2", "ioredis": "^5.3.2",
"mongoose": "^7.0.1", "mongoose": "^7.0.1",
"ms": "^2.1.3", "ms": "^2.1.3",
"pretty-ms": "^8.0.0" "pretty-ms": "^8.0.0",
"typescript": "^5.3.3"
}, },
"devDependencies": { "devDependencies": {
"@types/ms": "^0.7.34", "@types/ms": "^0.7.34",
"@types/node": "^20.10.5", "@types/node": "^20.10.5",
"@typescript-eslint/eslint-plugin": "^6.16.0",
"@typescript-eslint/parser": "^6.16.0",
"eslint": "^8.56.0",
"prettier": "^3.1.1", "prettier": "^3.1.1",
"ts-node": "^10.9.2", "ts-node": "^10.9.2"
"typescript": "^5.3.3"
} }
} }

View File

@@ -5,15 +5,15 @@ import env from "../src/utils/Env"
const rest = new REST({ version: "10" }).setToken(env.prod.token!) const rest = new REST({ version: "10" }).setToken(env.prod.token!)
const commands: RESTPutAPIApplicationCommandsJSONBody = [] const commands: RESTPutAPIApplicationCommandsJSONBody = []
const commandFiles = fs.readdirSync("./dist/src/commands").filter(file => file.endsWith(".js")) const commandFiles = fs.readdirSync("./src/commands").filter(file => file.endsWith(".ts"))
const contentMenuCommands = fs.readdirSync("./dist/src/commands-contextmenu").filter(file => file.endsWith(".js")) const contentMenuCommands = fs.readdirSync("./src/commands-contextmenu").filter(file => file.endsWith(".ts"))
for (const file of commandFiles) { for (const file of commandFiles) {
const command: Command = require(`../dist/src/commands/${file}`) const command: Command = require(`../src/commands/${file}`)
commands.push(command.data.toJSON()) commands.push(command.data.toJSON())
} }
for (const file of contentMenuCommands) { for (const file of contentMenuCommands) {
const command: Command = require(`../dist/src/commands-contextmenu/${file}`) const command: Command = require(`../src/commands-contextmenu/${file}`)
commands.push(command.data.toJSON()) commands.push(command.data.toJSON())
} }

View File

@@ -35,7 +35,8 @@ export = {
.setName("ign") .setName("ign")
.setDescription("The player's IGN.") .setDescription("The player's IGN.")
.setRequired(true), .setRequired(true),
), )
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({}) await interaction.deferReply({})
@@ -285,13 +286,6 @@ export = {
const hypixelExp = player.networkExp || 0 const hypixelExp = player.networkExp || 0
const level = hypixelLevel(hypixelExp) const level = hypixelLevel(hypixelExp)
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
@@ -311,8 +305,8 @@ export = {
url: head!, url: head!,
}, },
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: true })!,
}, },
fields: statsFields, fields: statsFields,
}, },

View File

@@ -42,7 +42,7 @@ export = {
async execute(interaction) { async execute(interaction) {
await interaction.deferReply() await interaction.deferReply()
const user = interaction.member as GuildMember const user = interaction.options.getMember("user") as GuildMember
const ign = interaction.options.getString("ign") const ign = interaction.options.getString("ign")
const mod = interaction.user const mod = interaction.user
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))

View File

@@ -79,7 +79,8 @@ export = {
"The amount of guild members to show. [Default: 10]", "The amount of guild members to show. [Default: 10]",
), ),
), ),
), )
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const subcommand = interaction.options.getSubcommand() const subcommand = interaction.options.getSubcommand()
@@ -100,21 +101,14 @@ export = {
return return
} }
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: true })
await interaction.reply({ await interaction.reply({
embeds: [ embeds: [
{ {
description: "This command is currently under development", description: "This command is currently under development",
color: embedColor, color: embedColor,
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
}, },
}, },
], ],

View File

@@ -191,13 +191,6 @@ async function guildInfo(
averageGuildMembersWeeklyXPUnformatted, averageGuildMembersWeeklyXPUnformatted,
) )
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
@@ -240,8 +233,8 @@ async function guildInfo(
], ],
color: embedColor, color: embedColor,
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
}, },
}, },
], ],

View File

@@ -167,13 +167,6 @@ async function guildMember(
":" + ":" +
guildMemberJoinSeconds guildMemberJoinSeconds
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
@@ -210,8 +203,8 @@ async function guildMember(
}, },
], ],
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: false })!,
}, },
}, },
], ],

View File

@@ -263,12 +263,6 @@ async function guildTop(
} }
}) })
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
const cacheStatusText = cacheStatus ? " | [Cache]" : "" const cacheStatusText = cacheStatus ? " | [Cache]" : ""
await interaction.editReply({ await interaction.editReply({
@@ -285,8 +279,8 @@ async function guildTop(
color: embedColor, color: embedColor,
fields: newList, fields: newList,
footer: { footer: {
text: footerText + " | " + devMessage + cacheStatusText, text: interaction.guild!.name + " | " + devMessage + cacheStatusText,
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: false })!,
}, },
}, },
], ],

View File

@@ -12,7 +12,7 @@ export = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("help") .setName("help")
.setDescription("List's all commands usable by a member") .setDescription("List's all commands usable by a member")
.setDMPermission(true), .setDMPermission(false),
async execute(interaction, client) { async execute(interaction, client) {
await interaction.deferReply({ ephemeral: true }) await interaction.deferReply({ ephemeral: true })
@@ -57,12 +57,6 @@ export = {
} }
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
@@ -72,13 +66,11 @@ export = {
fields: commandList, fields: commandList,
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: interaction?.guild?.iconURL({ url: interaction.guild!.iconURL({ forceStatic: true, })!,
forceStatic: true,
})!,
}, },
footer: { footer: {
icon_url: footerIcon!, icon_url: interaction.guild!.iconURL({ forceStatic: false})!,
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
}, },
}, },
], ],

View File

@@ -12,7 +12,8 @@ export = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("instructions") .setName("instructions")
.setDescription("Instructions for verification") .setDescription("Instructions for verification")
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator), .setDefaultMemberPermissions(PermissionFlagsBits.Administrator)
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))

View File

@@ -11,28 +11,22 @@ export = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("ping") .setName("ping")
.setDescription("Get's the bot's ping."), .setDescription("Get's the bot's ping.")
.setDMPermission(false),
async execute(interaction, client) { async execute(interaction, client) {
await interaction.deferReply() await interaction.deferReply()
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
description: "Ping of the bot is " + client.ws.ping + "ms.", description: "Ping of the bot is " + client.ws.ping + "ms.",
color: embedColor, color: embedColor,
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon || undefined, icon_url: interaction.guild?.iconURL({ forceStatic: false }) || undefined,
}, },
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },

View File

@@ -20,20 +20,13 @@ export = {
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("reqs") .setName("reqs")
.setDescription("Displays the requirements for the guild."), .setDescription("Displays the requirements for the guild.")
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply({ ephemeral: true })
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
await interaction.editReply({ await interaction.reply({
embeds: [ embeds: [
{ {
title: "Requirements", title: "Requirements",
@@ -42,9 +35,7 @@ export = {
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: url:
interaction?.guild?.iconURL({ interaction?.guild?.iconURL({ forceStatic: false, }) || "",
forceStatic: false,
}) || "",
}, },
fields: [ fields: [
{ {
@@ -78,8 +69,8 @@ export = {
}, },
], ],
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon || undefined, icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
}, },
}, },
], ],

View File

@@ -1,26 +1,6 @@
import verify = require("../../schemas/verifySchema") import verify = require("../../schemas/verifySchema")
import { color, hypixelGuildID } from "../../../config/options.json" import { color, hypixelGuildID } from "../../../config/options.json"
import { import removeRoles from "../../utils/functions/rolesmanage"
gm,
manager,
moderator,
beast,
elite,
member,
guildRole,
guildStaff,
defaultMember,
} from "../../../config/roles.json"
const removeThese = [
gm,
manager,
moderator,
beast,
elite,
member,
guildRole,
guildStaff,
]
import { ChatInputCommandInteraction, GuildMember } from "discord.js" import { ChatInputCommandInteraction, GuildMember } from "discord.js"
import env from "../../utils/Env" import env from "../../utils/Env"
import { getGuild } from "../../utils/Hypixel" import { getGuild } from "../../utils/Hypixel"
@@ -31,13 +11,13 @@ export async function updateDiscordRoles(
): Promise<void> { ): Promise<void> {
const discordMember = interaction.member as GuildMember const discordMember = interaction.member as GuildMember
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
await interaction.deferReply({ ephemeral: true }) await interaction.deferReply()
if (discordMember.user.id !== env.prod.dev) { if (discordMember.user.id !== env.prod.dev) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
description: `You do not have permission to use this command.`, description: "You do not have permission to use this command.",
color: embedColor, color: embedColor,
}, },
], ],
@@ -66,6 +46,17 @@ export async function updateDiscordRoles(
}) })
const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid) const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid)
const allVerifiedUsers = (await verify.find({})) as {
userID: string
uuid: string
}[]
const verifiedUsers = allVerifiedUsers.map(user => {
return {
userID: user.userID,
uuid: user.uuid,
}
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
@@ -76,19 +67,23 @@ export async function updateDiscordRoles(
}) })
for (const gmember of guildMembers) { for (const gmember of guildMembers) {
const memberData = await verify.findOne({ userID: gmember.id }) const memberData = verifiedUsers.find(
user => user.userID === gmember.id,
)
if (!memberData) { if (!memberData) {
const rolesToremove = removeRoles("default").rolesToRemove
await gmember.member.roles.remove( await gmember.member.roles.remove(
removeThese, rolesToremove,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} }
if (!guildMemberIDs.includes(memberData?.uuid || "none")) { if (!guildMemberIDs.includes(memberData?.uuid || "none")) {
const rolesToremove = removeRoles("default").rolesToRemove
await gmember.member.roles.remove( await gmember.member.roles.remove(
removeThese, rolesToremove,
"Updating all discord members", "Updating all discord members",
) )
continue continue
@@ -99,98 +94,95 @@ export async function updateDiscordRoles(
console.log("Updating roles for " + gmember.member.user.username) console.log("Updating roles for " + gmember.member.user.username)
if (guildMemberRank === "Guild Master") { if (guildMemberRank === "Guild Master") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== gm && role !== guildStaff && role !== guildRole)
removeThese, // await gmember.member.roles.remove(rolesToRemove, "Updating all discord members")
// await gmember.member.roles.add( gm, "Updating all discord members",)
// await gmember.member.roles.add( guildStaff, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("gm")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
gm, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} else if (guildMemberRank === "Manager") { } else if (guildMemberRank === "Manager") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== manager && role !== guildStaff && role !== guildRole)
removeThese, // await gmember.member.roles.remove( rolesToRemove, "Updating all discord members",)
// await gmember.member.roles.add( manager, "Updating all discord members",)
// await gmember.member.roles.add( guildStaff, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("manager")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
manager, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} else if (guildMemberRank === "Moderator") { } else if (guildMemberRank === "Moderator") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== moderator && role !== guildStaff && role !== guildRole)
removeThese, // await gmember.member.roles.remove( rolesToRemove, "Updating all discord members",)
// await gmember.member.roles.add( moderator, "Updating all discord members",)
// await gmember.member.roles.add( guildStaff, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("moderator")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
moderator, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} else if (guildMemberRank === "Beast") { } else if (guildMemberRank === "Beast") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== beast && role !== guildRole)
removeThese, // await gmember.member.roles.remove( rolesToRemove, "Updating all discord members",)
// await gmember.member.roles.add( beast, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("beast")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
beast, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} else if (guildMemberRank === "Elite") { } else if (guildMemberRank === "Elite") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== elite && role !== guildRole)
removeThese, // await gmember.member.roles.remove( rolesToRemove, "Updating all discord members",)
// await gmember.member.roles.add( elite, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("elite")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
elite, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
} else if (guildMemberRank === "Member") { } else if (guildMemberRank === "Member") {
await gmember.member.roles.remove( // const rolesToRemove = removeThese.filter(role => role !== member && role !== guildRole)
removeThese, // await gmember.member.roles.remove( rolesToRemove, "Updating all discord members",)
// await gmember.member.roles.add( member, "Updating all discord members",)
// await gmember.member.roles.add( guildRole, "Updating all discord members",)
const rolesmanage = removeRoles("member")
gmember.member.roles.remove(
rolesmanage.rolesToRemove,
"Updating all discord members", "Updating all discord members",
) )
await gmember.member.roles.add( gmember.member.roles.add(
member, rolesmanage.rolesToAdd,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members", "Updating all discord members",
) )
continue continue
@@ -199,10 +191,12 @@ export async function updateDiscordRoles(
} }
} }
console.log("Successfully updated all roles.")
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
description: `Successfully updated all roles.`, description: "Successfully updated all roles.",
color: embedColor, color: embedColor,
}, },
], ],

View File

@@ -18,7 +18,8 @@ export = {
.setName("ign") .setName("ign")
.setDescription("Player's name") .setDescription("Player's name")
.setRequired(true), .setRequired(true),
), )
.setDMPermission(false),
async execute(interaction) { async execute(interaction) {
await interaction.deferReply() await interaction.deferReply()
@@ -29,12 +30,6 @@ export = {
const newIgn = (await getIGN(uuid)) as string const newIgn = (await getIGN(uuid)) as string
const head = await getHeadURL(ign) const head = await getHeadURL(ign)
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
const footerText = interaction.guild
? interaction.guild.name
: interaction.user.username
const footerIcon = interaction.guild
? interaction.guild.iconURL({ forceStatic: false })
: interaction.user.avatarURL({ forceStatic: false })
if (!uuid) { if (!uuid) {
interaction.editReply({ interaction.editReply({
@@ -64,8 +59,8 @@ export = {
url: head!, url: head!,
}, },
footer: { footer: {
text: footerText + " | " + devMessage, text: interaction.guild!.name + " | " + devMessage,
icon_url: footerIcon || undefined, icon_url: interaction.guild?.iconURL({ forceStatic: false }) || undefined,
}, },
}, },
], ],

View File

@@ -1,4 +1,4 @@
import { SlashCommandBuilder } from "discord.js" import { GuildMember, SlashCommandBuilder } from "discord.js"
import { getUUID, getPlayer, getGuild, getHeadURL } from "../utils/Hypixel" import { getUUID, getPlayer, getGuild, getHeadURL } from "../utils/Hypixel"
import { color, hypixelGuildID, devMessage } from "../../config/options.json" import { color, hypixelGuildID, devMessage } from "../../config/options.json"
import mongoose from "mongoose" import mongoose from "mongoose"
@@ -39,8 +39,7 @@ export = {
async execute(interaction) { async execute(interaction) {
await interaction.deferReply() await interaction.deferReply()
const user1 = interaction.user const user = interaction.member! as GuildMember
const user = interaction.guild!.members.cache.get(user1.id)!
const ign = interaction.options.getString("ign")! const ign = interaction.options.getString("ign")!
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
@@ -114,10 +113,10 @@ export = {
} }
let username = "" let username = ""
if (user1.discriminator === "0") { if (user.user.discriminator === "0") {
username = user1.username username = user.user.username
} else { } else {
username = user1.username + "#" + user1.discriminator username = user.user.username + "#" + user.user.discriminator
} }
await interaction.editReply({ await interaction.editReply({

View File

@@ -4,5 +4,6 @@ export default interface Autocomplete {
name: string name: string
description: string description: string
type: "autocomplete" type: "autocomplete"
execute: (interaction: AutocompleteInteraction) => Promise<void> // eslint-disable-next-line no-unused-vars
execute: (interacion: AutocompleteInteraction) => Promise<void>
} }

View File

@@ -4,5 +4,6 @@ export default interface Button {
name: string name: string
description: string description: string
type: "button" type: "button"
// eslint-disable-next-line no-unused-vars
execute: (interaction: ButtonInteraction) => Promise<void> execute: (interaction: ButtonInteraction) => Promise<void>
} }

View File

@@ -12,8 +12,6 @@ export default interface Command {
"addSubcommand" | "addSubcommandGroup" | "addIntegerOption" "addSubcommand" | "addSubcommandGroup" | "addIntegerOption"
> >
subcommands?: boolean subcommands?: boolean
execute: ( // eslint-disable-next-line no-unused-vars
interaction: ChatInputCommandInteraction, execute: ( interaction: ChatInputCommandInteraction, client: Client,) => Promise<void>
client: Client,
) => Promise<void>
} }

View File

@@ -9,5 +9,6 @@ export default interface ContextMenu {
type: "contextmenu" type: "contextmenu"
dev?: boolean dev?: boolean
data: ContextMenuCommandBuilder data: ContextMenuCommandBuilder
// eslint-disable-next-line no-unused-vars
execute: (interaction: ContextMenuCommandInteraction) => Promise<void> execute: (interaction: ContextMenuCommandInteraction) => Promise<void>
} }

View File

@@ -1,4 +1,3 @@
import { CronCommand } from "cron"
import { TimeZones } from "." import { TimeZones } from "."
interface TimeFormat { interface TimeFormat {

View File

@@ -5,5 +5,6 @@ export default interface Event {
description: string description: string
type: "event" type: "event"
event: keyof ClientEvents event: keyof ClientEvents
// eslint-disable-next-line no-unused-vars
execute(...args: any[]): void execute(...args: any[]): void
} }

View File

@@ -4,5 +4,6 @@ export default interface Modal {
name: string name: string
description: string description: string
type: "modal" type: "modal"
// eslint-disable-next-line no-unused-vars
execute: (interaction: ModalSubmitInteraction) => Promise<void> execute: (interaction: ModalSubmitInteraction) => Promise<void>
} }

View File

@@ -8,8 +8,6 @@ const client = new Client()
const redis = new Redis(env.prod.redisURI!) const redis = new Redis(env.prod.redisURI!)
class Bot { class Bot {
constructor() {}
async start() { async start() {
init() init()
client.start() client.start()

View File

@@ -0,0 +1,92 @@
import {
gm,
manager,
moderator,
beast,
elite,
member,
guildStaff,
guildRole,
} from "../../../config/roles.json"
const roles = [
gm,
manager,
moderator,
beast,
elite,
member,
guildStaff,
guildRole,
]
type RoleType =
| "gm"
| "manager"
| "moderator"
| "beast"
| "elite"
| "member"
| "default"
export default function removeRoles(role: RoleType): {
rolesToRemove: string[]
rolesToAdd: string[]
} {
if (role === "gm") {
const rolesToRemove = roles.filter(
role => role !== gm && role !== guildStaff && role !== guildRole,
)
const rolesToAdd = [gm, guildStaff, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "manager") {
const rolesToRemove = roles.filter(
role =>
role !== manager && role !== guildStaff && role !== guildRole,
)
const rolesToAdd = [manager, guildStaff, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "moderator") {
const rolesToRemove = roles.filter(
role =>
role !== moderator && role !== guildStaff && role !== guildRole,
)
const rolesToAdd = [moderator, guildStaff, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "beast") {
const rolesToRemove = roles.filter(
role => role !== beast && role !== guildRole,
)
const rolesToAdd = [beast, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "elite") {
const rolesToRemove = roles.filter(
role => role !== elite && role !== guildRole,
)
const rolesToAdd = [elite, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "member") {
const rolesToRemove = roles.filter(
role => role !== member && role !== guildRole,
)
const rolesToAdd = [member, guildRole]
return { rolesToRemove, rolesToAdd }
}
if (role === "default") {
const rolesToRemove = roles
const rolesToAdd: string[] = []
return { rolesToRemove, rolesToAdd }
}
return { rolesToRemove: [], rolesToAdd: [] }
}

View File

@@ -9,6 +9,8 @@
"skipLibCheck": true, "skipLibCheck": true,
"strictNullChecks": true, "strictNullChecks": true,
"resolveJsonModule": true, "resolveJsonModule": true,
"removeComments": true,
"noUnusedLocals": true,
"outDir": "dist" "outDir": "dist"
}, },
"include": ["src"], "include": ["src"],

876
yarn.lock

File diff suppressed because it is too large Load Diff