[deploy] add in-ticket pipeline status buttons
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s

This commit is contained in:
Pascal Prießnitz
2025-12-03 14:36:16 +01:00
parent 935a48fc17
commit b672e2c6a2

View File

@@ -129,6 +129,30 @@ export class TicketService {
} }
const transcriptPath = await this.exportTranscript(interaction.channel as TextChannel, ticket.id); const transcriptPath = await this.exportTranscript(interaction.channel as TextChannel, ticket.id);
await interaction.reply({ content: `Transcript erstellt: ${transcriptPath}`, ephemeral: true }); await interaction.reply({ content: `Transcript erstellt: ${transcriptPath}`, ephemeral: true });
return;
}
if (interaction.customId.startsWith('ticket:status:')) {
const targetStatus = interaction.customId.split(':')[2];
const ticket = await this.getTicketByChannel(interaction);
if (!ticket) {
await interaction.reply({ content: 'Kein Ticket gefunden.', ephemeral: true });
return;
}
const member = interaction.member as GuildMember;
const cfg = settingsStore.get(interaction.guild.id);
const supportRoleId = cfg?.supportRoleId || env.supportRoleId;
const canManage =
ticket.claimedBy === interaction.user.id ||
(supportRoleId && member?.roles.cache.has(supportRoleId)) ||
member?.permissions.has(PermissionsBitField.Flags.ManageMessages);
if (!canManage) {
await interaction.reply({ content: 'Keine Berechtigung, Status zu ändern.', ephemeral: true });
return;
}
await this.updateStatus(ticket.id, targetStatus as TicketStatus);
await interaction.reply({ content: `Status gesetzt auf ${targetStatus}.`, ephemeral: true });
return;
} }
} }
@@ -288,12 +312,13 @@ export class TicketService {
new ButtonBuilder().setCustomId('ticket:close').setLabel('Schliessen').setStyle(ButtonStyle.Danger), new ButtonBuilder().setCustomId('ticket:close').setLabel('Schliessen').setStyle(ButtonStyle.Danger),
new ButtonBuilder().setCustomId('ticket:transcript').setLabel('Transcript').setStyle(ButtonStyle.Secondary) new ButtonBuilder().setCustomId('ticket:transcript').setLabel('Transcript').setStyle(ButtonStyle.Secondary)
); );
const statusRow = this.buildStatusButtons();
const supportMention = supportRoleId ? `<@&${supportRoleId}>` : null; const supportMention = supportRoleId ? `<@&${supportRoleId}>` : null;
await channel.send({ await channel.send({
content: supportMention ? `${member} ${supportMention}` : `${member}`, content: supportMention ? `${member} ${supportMention}` : `${member}`,
embeds: [embed], embeds: [embed],
components: [controls], components: [controls, statusRow],
allowedMentions: supportMention ? { roles: [supportRoleId as string], users: [member.id] } : { users: [member.id] } allowedMentions: supportMention ? { roles: [supportRoleId as string], users: [member.id] } : { users: [member.id] }
}); });
await this.sendTicketCreatedLog(guild, channel, member, topic, nextNumber, supportRoleId); await this.sendTicketCreatedLog(guild, channel, member, topic, nextNumber, supportRoleId);
@@ -533,4 +558,13 @@ export class TicketService {
const cfg = settingsStore.get(guildId); const cfg = settingsStore.get(guildId);
return cfg?.ticketsEnabled === true; return cfg?.ticketsEnabled === true;
} }
private buildStatusButtons() {
return new ActionRowBuilder<ButtonBuilder>().addComponents(
new ButtonBuilder().setCustomId('ticket:status:neu').setLabel('Neu').setStyle(ButtonStyle.Secondary),
new ButtonBuilder().setCustomId('ticket:status:in_bearbeitung').setLabel('In Bearbeitung').setStyle(ButtonStyle.Primary),
new ButtonBuilder().setCustomId('ticket:status:warten_auf_user').setLabel('Warten auf User').setStyle(ButtonStyle.Secondary),
new ButtonBuilder().setCustomId('ticket:status:erledigt').setLabel('Erledigt').setStyle(ButtonStyle.Success)
);
}
} }