all repos — discord-utils @ 66ef95f27a673b48332c6e84825e504d70db4136

feat: try to default to ticket number in channel name
vi did:web:vt3e.cat
Wed, 01 Jul 2026 03:25:33 +0100
commit

66ef95f27a673b48332c6e84825e504d70db4136

parent

fe1626583ce351ffa2bf22c5d83dd638aa409753

1 files changed, 10 insertions(+), 3 deletions(-)

jump to
M src/commands/ban.tssrc/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(