[deploy] add in-ticket pipeline status buttons
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s
All checks were successful
Deploy Discord Bot / deploy (push) Successful in 37s
This commit is contained in:
@@ -129,6 +129,30 @@ export class TicketService {
|
||||
}
|
||||
const transcriptPath = await this.exportTranscript(interaction.channel as TextChannel, ticket.id);
|
||||
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:transcript').setLabel('Transcript').setStyle(ButtonStyle.Secondary)
|
||||
);
|
||||
const statusRow = this.buildStatusButtons();
|
||||
|
||||
const supportMention = supportRoleId ? `<@&${supportRoleId}>` : null;
|
||||
await channel.send({
|
||||
content: supportMention ? `${member} ${supportMention}` : `${member}`,
|
||||
embeds: [embed],
|
||||
components: [controls],
|
||||
components: [controls, statusRow],
|
||||
allowedMentions: supportMention ? { roles: [supportRoleId as string], users: [member.id] } : { users: [member.id] }
|
||||
});
|
||||
await this.sendTicketCreatedLog(guild, channel, member, topic, nextNumber, supportRoleId);
|
||||
@@ -533,4 +558,13 @@ export class TicketService {
|
||||
const cfg = settingsStore.get(guildId);
|
||||
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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user