feat: try to default to ticket number in channel name
vi did:web:vt3e.cat
Wed, 01 Jul 2026 03:25:33 +0100
1 files changed,
10 insertions(+),
3 deletions(-)
jump to
M
src/commands/ban.ts
→
src/commands/ban.ts
@@ -1,5 +1,5 @@
import { Result } from "@sapphire/result"; -import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js"; +import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ChannelType } from "discord.js"; import { parseIncludedGames, parseDuration, createReactive } from "@/utils"; import config, { type Game } from "@/config";@@ -60,7 +60,7 @@ integrationTypes: INTEGRATION_TYPE_PRESETS.USER_ONLY,
options: { player: option.string("ID of the player to ban", { required: true }), reason: option.string("reason for the ban", { required: true }), - "private-reason": option.string("private reason for the ban", { required: true }), + "private-reason": option.string("private reason for the ban", { required: false }), length: option.string("length of the ban; defaults to permanent"), "ban-alts": option.boolean("whether to ban alts of the user; defaults to true"), games: option.string("games to ban them from; defaults to all"),@@ -68,6 +68,12 @@ },
run: async (interaction, options) => { await interaction.deferReply({ withResponse: true }); + let ticketNumber: number | undefined; + if (interaction.channel && interaction.channel.type === ChannelType.GuildText) { + const parts = interaction.channel.name.split("-"); + if (parts[1]) ticketNumber = parseInt(parts[1]); + } + const gamesResult = Result.from(() => parseIncludedGames(options.games)); if (gamesResult.isErr()) { const err = gamesResult.unwrapErr();@@ -123,7 +129,8 @@ const banOptions = {
duration, excludeAltAccounts: !!options["ban-alts"], displayReason: options.reason, - privateReason: options["private-reason"], + privateReason: + options["private-reason"] || ticketNumber ? `ticket #${ticketNumber}` : "none provided", }; await Promise.all(