db,bot: list tickets command
vi did:web:vt3e.cat
Sun, 28 Jun 2026 01:57:03 +0100
4 files changed,
119 insertions(+),
4 deletions(-)
M
apps/bot/src/feats/tickets/README.md
→
apps/bot/src/feats/tickets/README.md
@@ -31,4 +31,4 @@ - [ ] other ticket stuff
- [x] permissions - [ ] add participants - [x] log messages - - [ ] private thread too + - [x] private thread too
M
apps/bot/src/feats/tickets/commands.ts
→
apps/bot/src/feats/tickets/commands.ts
@@ -1,13 +1,13 @@
import { option } from "@purrkit/router"; import { Result } from "@sapphire/result"; -import { getTicketByGuild, getTicketByUser } from "@stealth-developers/db"; +import { getTicketByGuild, getTicketByUser, getTicketsByUser } from "@stealth-developers/db"; import { ActionRowBuilder, ButtonBuilder, ContainerBuilder, TextDisplayBuilder } from "discord.js"; import { PublicError, errorMessage, getTextChannel, handleError, logger } from "@/lib"; import { useGetTicketData } from "@/middleware"; import * as actions from "./actions"; -import { TicketButtonPresets } from "./buttons"; +import { TicketButtonPresets, getTicketsListPayload } from "./buttons"; import { hasAccessToTicket } from "./lib"; import { manageConfig } from "./lib/config"; import { TicketModalPresets } from "./modals";@@ -254,6 +254,31 @@ );
ticketCommand.group( "manage", + { + description: "Manage your ticket data", + }, + (group) => { + group.subcommand("list", { + description: "List your tickets", + async run(interaction, _, { actor }) { + if (!actor) return errorMessage(interaction, "You must be logged in to run this command"); + + const tickets = await getTicketsByUser(actor.id); + if (tickets.length === 0) return errorMessage(interaction, "You have no tickets"); + + const payload = getTicketsListPayload(actor.id, 1, tickets); + + return interaction.reply({ + ...payload, + flags: ["Ephemeral", "IsComponentsV2"], + }); + }, + }); + }, +); + +ticketCommand.group( + "settings", { description: "Manage ticket settings", },
M
pkgs/db/src/utils/ticket.ts
→
pkgs/db/src/utils/ticket.ts
@@ -149,6 +149,15 @@ if (!result) return undefined;
return await getTicketById(ticketId); } +export async function getTicketsByUser(userId: number): Promise<TicketWithRelations[]> { + return await db.query.tickets.findMany({ + where: { + openedBy: userId, + }, + with: ticketWithRelations, + }); +} + // standard ops export async function createTicket(data: { guildId: number;