Moved all db logic to db functions

This commit is contained in:
2024-10-25 19:52:34 +02:00
parent d206703098
commit f2aa84f8a5
28 changed files with 244 additions and 73 deletions

View File

@@ -1,5 +1,6 @@
import { ApplicationCommandType, ContextMenuCommandBuilder, InteractionContextType, PermissionFlagsBits, userMention } from "discord.js" import { ApplicationCommandType, ContextMenuCommandBuilder, InteractionContextType, PermissionFlagsBits, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { waitingListRole } from "~/config/roles.js" import { waitingListRole } from "~/config/roles.js"
import { IContextMenu } from "~/interfaces" import { IContextMenu } from "~/interfaces"
@@ -24,9 +25,7 @@ export default {
const targetId = interaction.targetId const targetId = interaction.targetId
const user = await interaction.guild!.members.fetch(targetId) const user = await interaction.guild!.members.fetch(targetId)
const usermentioned = userMention(user.user.id) const usermentioned = userMention(user.user.id)
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(userID, user.id)
})
if (!verifyData) { if (!verifyData) {
await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => {

View File

@@ -1,6 +1,7 @@
import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js" import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addSetting, getSetting, updateSetting } from "src/drizzle/functions"
import { settings } from "src/drizzle/schema.js" import { settings } from "src/drizzle/schema.js"
import { embedColor } from "~/config/options.js" import { embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -38,12 +39,10 @@ export default {
const setting = interaction.options.getString("setting")! const setting = interaction.options.getString("setting")!
const value = interaction.options.getString("value")! const value = interaction.options.getString("value")!
const settingsData = await db.query.settings.findFirst({ const settingsData = await getSetting({ name: setting })
where: ({ name }, { eq }) => eq(name, setting)
})
if (!settingsData) { if (!settingsData) {
await db.insert(settings).values({ await addSetting({
name: setting, name: setting,
value: value value: value
}) })
@@ -55,9 +54,9 @@ export default {
}] }]
}) })
} else { } else {
await db.update(settings).set({ await updateSetting({
value: value value
}).where(eq(settings.name, setting)) })
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,5 +1,6 @@
import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
import { getHeadURL, getIGN, getUUID } from "~/utils/Hypixel.js" import { getHeadURL, getIGN, getUUID } from "~/utils/Hypixel.js"
@@ -37,9 +38,7 @@ export default {
return return
} }
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ uuid })
where: ({ uuid: uuidfromdb }, { eq }) => eq(uuidfromdb, uuid)
})
if (!verifyData) { if (!verifyData) {
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,6 +1,7 @@
import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify, removeVerify } from "src/drizzle/functions"
import { verifies } from "src/drizzle/schema.js" import { verifies } from "src/drizzle/schema.js"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -28,9 +29,7 @@ export default {
async execute({ interaction }) { async execute({ interaction }) {
const member = interaction.options.getMember("user") as GuildMember const member = interaction.options.getMember("user") as GuildMember
const verifiedUser = await db.query.verifies.findFirst({ const verifiedUser = await getVerify({ userID: member.user.id })
where: ({ userID }, { eq }) => eq(userID, member.user.id)
})
const mod = interaction.user const mod = interaction.user
if (!verifiedUser) { if (!verifiedUser) {
@@ -45,7 +44,7 @@ export default {
const uuid = verifiedUser.uuid const uuid = verifiedUser.uuid
const ign = await getIGN(uuid) const ign = await getIGN(uuid)
await db.delete(verifies).where(eq(verifies.userID, member.user.id)) await removeVerify({ userID: member.user.id })
await member.roles.remove( await member.roles.remove(
roleManage("all").rolesToRemove, roleManage("all").rolesToRemove,
"User force unverified by " + interaction.user.username "User force unverified by " + interaction.user.username

View File

@@ -1,5 +1,6 @@
import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { waitingListRole } from "~/config/roles.js" import { waitingListRole } from "~/config/roles.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -29,9 +30,7 @@ export default {
const user = interaction.options.getMember("user") as GuildMember const user = interaction.options.getMember("user") as GuildMember
const usermentioned = userMention(user.user.id) const usermentioned = userMention(user.user.id)
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.user.id })
where: ({ userID }, { eq }) => eq(userID, user.user.id)
})
if (!verifyData) { if (!verifyData) {
await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => {

View File

@@ -1,5 +1,6 @@
import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addVerify, getVerify } from "src/drizzle/functions"
import { verifies } from "src/drizzle/schema.js" import { verifies } from "src/drizzle/schema.js"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -38,9 +39,7 @@ export default {
const ign = interaction.options.getString("ign")! const ign = interaction.options.getString("ign")!
const mod = interaction.user const mod = interaction.user
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(userID, user.user.id)
})
if (verifyData) { if (verifyData) {
interaction.editReply("That user is already verified.") interaction.editReply("That user is already verified.")
return return
@@ -141,7 +140,7 @@ export default {
// Do nothing // Do nothing
}) })
await db.insert(verifies).values({ await addVerify({
userID: user.user.id, userID: user.user.id,
uuid: uuid uuid: uuid
}) })

View File

@@ -1,6 +1,7 @@
import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getWaitingList, removeWaitingList } from "src/drizzle/functions"
import { waitingLists } from "src/drizzle/schema.js" import { waitingLists } from "src/drizzle/schema.js"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { waitingListRole } from "~/config/roles.js" import { waitingListRole } from "~/config/roles.js"
@@ -36,9 +37,7 @@ export default {
const member = interaction.options.getMember("user") as GuildMember const member = interaction.options.getMember("user") as GuildMember
const reason = interaction.options.getString("reason") ?? "No reason provided." const reason = interaction.options.getString("reason") ?? "No reason provided."
const mod = interaction.user! const mod = interaction.user!
const waiting = await db.query.waitingLists.findFirst({ const waiting = await getWaitingList({ userID: member.user.id })
where: ({ userID }, { eq }) => eq(userID, member.user.id)
})
if (!waiting) { if (!waiting) {
await interaction.editReply({ await interaction.editReply({
@@ -50,7 +49,7 @@ export default {
return return
} }
await db.delete(waitingLists).where(eq(waitingLists.userID, member.user.id)) await removeWaitingList({ userID: member.user.id })
await member.roles.remove(waitingListRole, "Removed from waiting list.") await member.roles.remove(waitingListRole, "Removed from waiting list.")
await logToChannel("mod", { await logToChannel("mod", {

View File

@@ -1,5 +1,6 @@
import { ChatInputCommandInteraction, GuildMember } from "discord.js" import { ChatInputCommandInteraction, GuildMember } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerifies } from "src/drizzle/functions"
import { embedColor, hypixelGuildID } from "~/config/options.js" import { embedColor, hypixelGuildID } from "~/config/options.js"
import { IGuildData } from "~/interfaces" import { IGuildData } from "~/interfaces"
import env from "~/utils/Env.js" import env from "~/utils/Env.js"
@@ -35,7 +36,7 @@ export default async function removeGuildRoles(interaction: ChatInputCommandInte
const hypixelGuildMembers = guildData.members.map(gmember => gmember.uuid) const hypixelGuildMembers = guildData.members.map(gmember => gmember.uuid)
const verifiedUsers = await db.query.verifies.findMany() const verifiedUsers = await getVerifies()
for (const gmember of guildMembers) { for (const gmember of guildMembers) {
const gmemberuuid = verifiedUsers.find(user => user.userID === gmember.id)?.uuid const gmemberuuid = verifiedUsers.find(user => user.userID === gmember.id)?.uuid

View File

@@ -1,5 +1,6 @@
import { ChannelType, ChatInputCommandInteraction, GuildMember } from "discord.js" import { ChannelType, ChatInputCommandInteraction, GuildMember } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerifies } from "src/drizzle/functions"
import { embedColor, hypixelGuildID } from "~/config/options.js" import { embedColor, hypixelGuildID } from "~/config/options.js"
import { IGuildData } from "~/interfaces" import { IGuildData } from "~/interfaces"
import env from "~/utils/Env.js" import env from "~/utils/Env.js"
@@ -53,7 +54,7 @@ export default async function updateAll(interaction: ChatInputCommandInteraction
}) })
const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid) const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid)
const verifiedUsers = await db.query.verifies.findMany() const verifiedUsers = await getVerifies()
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,5 +1,6 @@
import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { waitingListRole } from "~/config/roles.js" import { waitingListRole } from "~/config/roles.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -21,9 +22,7 @@ export default {
await interaction.deferReply() await interaction.deferReply()
const user = interaction.member as GuildMember const user = interaction.member as GuildMember
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(userID, user.user.id)
})
if (!verifyData) { if (!verifyData) {
await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => {

View File

@@ -1,5 +1,6 @@
import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addVerify, getVerify } from "src/drizzle/functions"
import { verifies } from "src/drizzle/schema.js" import { verifies } from "src/drizzle/schema.js"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
@@ -33,9 +34,7 @@ export default {
const user = interaction.member! as GuildMember const user = interaction.member! as GuildMember
const ign = interaction.options.getString("ign")! const ign = interaction.options.getString("ign")!
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(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
@@ -166,7 +165,7 @@ export default {
// Do nothing // Do nothing
}) })
await db.insert(verifies).values({ await addVerify({
userID: user.id, userID: user.id,
uuid: uuid uuid: uuid
}) })

View File

@@ -1,5 +1,6 @@
import { InteractionContextType, SlashCommandBuilder, userMention } from "discord.js" import { InteractionContextType, SlashCommandBuilder, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
import { getHeadURL, getIGN } from "~/utils/Hypixel.js" import { getHeadURL, getIGN } from "~/utils/Hypixel.js"
@@ -19,9 +20,7 @@ export default {
await interaction.deferReply() await interaction.deferReply()
const user = interaction.user const user = interaction.user
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(userID, user.id)
})
if (!verifyData) { if (!verifyData) {
await interaction.editReply({ await interaction.editReply({

View File

@@ -1,5 +1,6 @@
import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getVerify } from "src/drizzle/functions"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces" import { ICommand } from "~/interfaces"
import { getHeadURL, getIGN } from "~/utils/Hypixel.js" import { getHeadURL, getIGN } from "~/utils/Hypixel.js"
@@ -26,9 +27,7 @@ export default {
await interaction.deferReply() await interaction.deferReply()
const user = interaction.options.getUser("user")! const user = interaction.options.getUser("user")!
const verifiedUser = await db.query.verifies.findFirst({ const verifiedUser = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(userID, user.id)
})
if (!verifiedUser) { if (!verifiedUser) {
interaction.editReply({ interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,4 +1,5 @@
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getGuildApp } from "src/drizzle/functions"
import { devMessage, embedColor } from "~/config/options.js" import { devMessage, embedColor } from "~/config/options.js"
import { bwfkdr, bwstars, bwwins, duelswins, duelswlr, swkdr, swstars } from "~/config/reqs.js" import { bwfkdr, bwstars, bwwins, duelswins, duelswlr, swkdr, swstars } from "~/config/reqs.js"
import { IButton } from "~/interfaces" import { IButton } from "~/interfaces"
@@ -14,9 +15,7 @@ export default {
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 db.query.guildApps.findFirst({ const guildappdata = await getGuildApp({ userID: applicantId })
where: ({ userID }, { eq }) => eq(userID, applicantId)
})
const uuid = guildappdata!.uuid const uuid = guildappdata!.uuid
const player = await getPlayer(uuid) const player = await getPlayer(uuid)

View File

@@ -1,6 +1,8 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, TextChannel } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle, TextChannel } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getGuildApp, removeVerify } from "src/drizzle/functions"
import { addWaitingList, getWaitingLists, removeWaitingList } from "src/drizzle/functions"
import { guildApps, waitingLists } from "src/drizzle/schema.js" import { guildApps, waitingLists } from "src/drizzle/schema.js"
import { embedColor, hypixelGuildID, waitingListChannel, waitingListMessage } from "~/config/options.js" import { embedColor, hypixelGuildID, waitingListChannel, waitingListMessage } from "~/config/options.js"
import { waitingListRole } from "~/config/roles.js" import { waitingListRole } from "~/config/roles.js"
@@ -54,20 +56,18 @@ export default {
}] }]
}) })
const applicantEntry = await db.query.guildApps.findFirst({ const applicantEntry = await getGuildApp({ userID: applicantId })
where: ({ userID }, { eq }) => eq(userID, applicantId)
})
const applicantUUID = applicantEntry!.uuid const applicantUUID = applicantEntry!.uuid
const time = Date.now() const time = Date.now()
await db.insert(waitingLists).values({ await addWaitingList({
userID: applicantId, userID: applicantId,
uuid: applicantUUID, uuid: applicantUUID,
timestamp: time timestamp: time
}) })
await applicant.roles.add(waitingListRole) await applicant.roles.add(waitingListRole)
await db.delete(guildApps).where(eq(guildApps.userID, applicantId)) await removeVerify({ userID: applicantId })
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{
@@ -90,14 +90,14 @@ export default {
const wlmessage = await channel!.messages.fetch(waitingListMessage) const wlmessage = await channel!.messages.fetch(waitingListMessage)
const wlembed = wlmessage.embeds[0] const wlembed = wlmessage.embeds[0]
const accepted = await db.query.waitingLists.findMany() const accepted = await getWaitingLists()
for (let i = 0; i < accepted.length; i++) { for (let i = 0; i < accepted.length; i++) {
const uuid = accepted[i].uuid const uuid = accepted[i].uuid
const guild = await getGuild(uuid) const guild = await getGuild(uuid)
if (guild && guild._id === hypixelGuildID) { if (guild && guild._id === hypixelGuildID) {
await db.delete(waitingLists).where(eq(waitingLists.uuid, uuid)) await removeWaitingList({ uuid })
continue continue
} }
} }

View File

@@ -1,5 +1,6 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addGuildApp, getGuildApp } from "src/drizzle/functions"
import { guildApps } from "src/drizzle/schema.js" import { guildApps } from "src/drizzle/schema.js"
import { ignM, largeM, smallM } from "~/config/limitmessages.js" import { ignM, largeM, smallM } from "~/config/limitmessages.js"
import { applicationsChannel, embedColor } from "~/config/options.js" import { applicationsChannel, embedColor } from "~/config/options.js"
@@ -31,9 +32,7 @@ export default {
return return
} }
const application = await db.query.guildApps.findFirst({ const application = await getGuildApp({ userID: user.user.id })
where: ({ userID }, { eq }) => eq(userID, user.user.id)
})
if (application) { if (application) {
await interaction.editReply("You already have an application in progress.") await interaction.editReply("You already have an application in progress.")
@@ -251,7 +250,7 @@ export default {
}] }]
}) })
await db.insert(guildApps).values({ await addGuildApp({
userID: user.user.id, userID: user.user.id,
uuid: uuid uuid: uuid
}) })

View File

@@ -1,6 +1,7 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { removeStaffApp } from "src/drizzle/functions"
import { staffApps } from "src/drizzle/schema.js" import { staffApps } from "src/drizzle/schema.js"
import { embedColor } from "~/config/options.js" import { embedColor } from "~/config/options.js"
import { IButton } from "~/interfaces" import { IButton } from "~/interfaces"
@@ -45,7 +46,7 @@ export default {
] ]
}) })
await db.delete(staffApps).where(eq(staffApps.userID, applicantId)) await removeStaffApp({ userID: applicantId })
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,5 +1,6 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addStaffApp, getSetting, getStaffApp } from "src/drizzle/functions"
import { staffApps } from "src/drizzle/schema.js" import { staffApps } from "src/drizzle/schema.js"
import { ignM, largeM } from "~/config/limitmessages.js" import { ignM, largeM } from "~/config/limitmessages.js"
import { embedColor, staffApplicationsChannel } from "~/config/options.js" import { embedColor, staffApplicationsChannel } from "~/config/options.js"
@@ -17,9 +18,7 @@ export default {
const user = interaction.member as GuildMember const user = interaction.member as GuildMember
const guild = interaction.guild! const guild = interaction.guild!
const userRoles = user.roles.cache const userRoles = user.roles.cache
const setting = await db.query.settings.findFirst({ const setting = await getSetting({ name: "staffapplications" })
where: ({ name }, { eq }) => eq(name, "staffApplications")
})
const status = setting?.value || "0" const status = setting?.value || "0"
function sq(n: number): string { function sq(n: number): string {
@@ -50,9 +49,7 @@ export default {
return return
} }
const application = await db.query.staffApps.findFirst({ const application = await getStaffApp({ userID: user.user.id })
where: ({ userID }, { eq }) => eq(userID, user.user.id)
})
if (application) { if (application) {
await interaction.editReply("You already have an application in progress.") await interaction.editReply("You already have an application in progress.")
@@ -225,7 +222,7 @@ export default {
}] }]
}) })
await db.insert(staffApps).values({ await addStaffApp({
userID: user.user.id, userID: user.user.id,
uuid: uuid uuid: uuid
}) })

View File

@@ -1,5 +1,6 @@
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { getWaitingLists, removeWaitingList } from "src/drizzle/functions"
import { waitingLists } from "src/drizzle/schema.js" import { waitingLists } from "src/drizzle/schema.js"
import { hypixelGuildID } from "~/config/options.js" import { hypixelGuildID } from "~/config/options.js"
import { IButton } from "~/interfaces" import { IButton } from "~/interfaces"
@@ -15,14 +16,14 @@ export default {
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 db.query.waitingLists.findMany() const accepted = await getWaitingLists()
for (let i = 0; i < accepted.length; i++) { for (let i = 0; i < accepted.length; i++) {
const uuid = accepted[i].uuid const uuid = accepted[i].uuid
const guild = await getGuild(uuid) const guild = await getGuild(uuid)
if (guild && guild._id === hypixelGuildID) { if (guild && guild._id === hypixelGuildID) {
await db.delete(waitingLists).where(eq(waitingLists.uuid, uuid)) await removeWaitingList({ uuid })
continue continue
} }
} }

View File

@@ -1,6 +1,7 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, GuildMember, Message } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, GuildMember, Message } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { removeGuildApp } from "src/drizzle/functions"
import { guildApps } from "src/drizzle/schema.js" import { guildApps } from "src/drizzle/schema.js"
import { embedColor } from "~/config/options.js" import { embedColor } from "~/config/options.js"
import { IModal } from "~/interfaces" import { IModal } from "~/interfaces"
@@ -83,7 +84,7 @@ export default {
responseEmbeds = [responseEmbed] responseEmbeds = [responseEmbed]
} }
await db.delete(guildApps).where(eq(guildApps.userID, applicantId)) await removeGuildApp({ userID: applicantId })
await interaction.editReply({ await interaction.editReply({
embeds: responseEmbeds embeds: responseEmbeds

View File

@@ -1,6 +1,7 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js" import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js"
import { eq } from "drizzle-orm" import { eq } from "drizzle-orm"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { removeStaffApp } from "src/drizzle/functions"
import { staffApps } from "src/drizzle/schema.js" import { staffApps } from "src/drizzle/schema.js"
import { embedColor } from "~/config/options.js" import { embedColor } from "~/config/options.js"
import { IModal } from "~/interfaces" import { IModal } from "~/interfaces"
@@ -45,7 +46,7 @@ export default {
await applicant.send({ embeds: [dmMessage] }) await applicant.send({ embeds: [dmMessage] })
await db.delete(staffApps).where(eq(staffApps.userID, applicantId)) await removeStaffApp({ userID: applicantId })
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [{

View File

@@ -1,5 +1,6 @@
import { GuildMember } from "discord.js" import { GuildMember } from "discord.js"
import db from "src/drizzle/db.js" import db from "src/drizzle/db.js"
import { addVerify, getVerify } from "src/drizzle/functions"
import { verifies } from "src/drizzle/schema.js" import { verifies } from "src/drizzle/schema.js"
import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js"
import { IModal } from "~/interfaces" import { IModal } from "~/interfaces"
@@ -15,9 +16,7 @@ export default {
const user = interaction.member as GuildMember const user = interaction.member as GuildMember
const ign = interaction.fields.fields.get("verifyign")!.value const ign = interaction.fields.fields.get("verifyign")!.value
const verifyData = await db.query.verifies.findFirst({ const verifyData = await getVerify({ userID: user.id })
where: ({ userID }, { eq }) => eq(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
@@ -147,7 +146,7 @@ export default {
// Do nothing // Do nothing
}) })
await db.insert(verifies).values({ await addVerify({
userID: user.id, userID: user.id,
uuid: uuid uuid: uuid
}) })

5
src/drizzle/functions.ts Normal file
View File

@@ -0,0 +1,5 @@
export * from "./functions/guildApps.js"
export * from "./functions/settings.js"
export * from "./functions/staffApps.js"
export * from "./functions/verifies.js"
export * from "./functions/waitingList.js"

View File

@@ -0,0 +1,32 @@
import { eq, or } from "drizzle-orm"
import db from "../db.js"
import { guildApps, InsertGuildApp } from "../schema.js"
type GuildAppDBData = Partial<Pick<InsertGuildApp, "userID" | "uuid">>
export async function addGuildApp(data: InsertGuildApp) {
await db.insert(guildApps).values(data)
}
export async function getGuildApp(data: GuildAppDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
return await db.query.guildApps.findFirst({
where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) =>
or(
eq(dbUuid, uuid),
eq(dbUserId, userId)
))
})
}
export async function removeGuildApp(data: GuildAppDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
await db.delete(guildApps).where(or(
eq(guildApps.userID, userId),
eq(guildApps.uuid, uuid)
))
}

View File

@@ -0,0 +1,41 @@
import { eq, or } from "drizzle-orm"
import db from "../db.js"
import { InsertSetting, settings } from "../schema.js"
type SettingsDBData = Partial<Pick<InsertSetting, "name" | "value">>
export async function addSetting(data: InsertSetting) {
await db.insert(settings).values(data)
}
export async function getSetting(data: SettingsDBData) {
const name = data.name ?? ""
const value = data.value ?? ""
return await db.query.settings.findFirst({
where: (({ name: dbName, value: dbValue }, { eq, or }) =>
or(
eq(dbName, name),
eq(dbValue, value)
))
})
}
export async function updateSetting(data: SettingsDBData) {
const name = data.name ?? ""
const value = data.value
await db.update(settings).set({
value: value
}).where(eq(settings.name, name))
}
export async function removeSetting(data: SettingsDBData) {
const name = data.name ?? ""
const value = data.value ?? ""
await db.delete(settings).where(or(
eq(settings.name, name),
eq(settings.value, value)
))
}

View File

@@ -0,0 +1,32 @@
import { eq, or } from "drizzle-orm"
import db from "../db.js"
import { InsertStaffApp, staffApps } from "../schema.js"
type StaffAppDBData = Partial<Pick<InsertStaffApp, "userID" | "uuid">>
export async function addStaffApp(data: InsertStaffApp) {
await db.insert(staffApps).values(data)
}
export async function getStaffApp(data: StaffAppDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
return await db.query.staffApps.findFirst({
where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) =>
or(
eq(dbUuid, uuid),
eq(dbUserId, userId)
))
})
}
export async function removeStaffApp(data: StaffAppDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
await db.delete(staffApps).where(or(
eq(staffApps.userID, userId),
eq(staffApps.uuid, uuid)
))
}

View File

@@ -0,0 +1,36 @@
import { eq, or } from "drizzle-orm"
import db from "../db.js"
import { InsertVerify, verifies } from "../schema.js"
type VerifyDBData = Partial<Pick<InsertVerify, "userID" | "uuid">>
export async function addVerify(data: InsertVerify) {
await db.insert(verifies).values(data)
}
export async function getVerify(data: VerifyDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
return await db.query.verifies.findFirst({
where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) =>
or(
eq(dbUuid, uuid),
eq(dbUserId, userId)
))
})
}
export async function getVerifies() {
return await db.query.verifies.findMany()
}
export async function removeVerify(data: VerifyDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
await db.delete(verifies).where(or(
eq(verifies.userID, userId),
eq(verifies.uuid, uuid)
))
}

View File

@@ -0,0 +1,36 @@
import { eq, or } from "drizzle-orm"
import db from "../db.js"
import { InsertWaitingList, waitingLists } from "../schema.js"
type WaitingListDBData = Partial<Pick<InsertWaitingList, "userID" | "uuid">>
export async function addWaitingList(data: InsertWaitingList) {
await db.insert(waitingLists).values(data)
}
export async function getWaitingList(data: WaitingListDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
return await db.query.waitingLists.findFirst({
where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) =>
or(
eq(dbUuid, uuid),
eq(dbUserId, userId)
))
})
}
export async function getWaitingLists() {
return await db.query.waitingLists.findMany()
}
export async function removeWaitingList(data: WaitingListDBData) {
const userId = data.userID ?? ""
const uuid = data.uuid ?? ""
await db.delete(waitingLists).where(or(
eq(waitingLists.userID, userId),
eq(waitingLists.uuid, uuid)
))
}