From 9da066e99ec2694f3fd4f953d86c6eb7af562edc Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Sun, 24 May 2026 22:21:01 +0200 Subject: [PATCH] Add: Transfer ticket & Priority change (DM) logs --- src/actions/transferTicket.ts | 16 ++++++++++++++++ src/actions/updateTicketPriority.ts | 14 +++++++++++++- src/builders/embeds.ts | 16 ++++++++++++++-- src/builders/messages.ts | 8 ++++---- src/core/main.ts | 9 ++++++++- src/core/mappings/builder.ts | 8 ++++---- 6 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/actions/transferTicket.ts b/src/actions/transferTicket.ts index 59ae605..b80cc4f 100644 --- a/src/actions/transferTicket.ts +++ b/src/actions/transferTicket.ts @@ -121,6 +121,22 @@ export async function registerActions(){ }), new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => { const {guild,channel,user,ticket,newCreator,reason} = params + + const lastCreatorId = ticket.get("opendiscord:previous-creators").value.at(-1) + if (!lastCreatorId) return + const lastCreator = await opendiscord.client.fetchUser(lastCreatorId) + if (!lastCreator) return + + //to logs + if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.transferring.logs){ + const logChannel = opendiscord.posts.get("opendiscord:logs") + if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"transfer",reason,additionalData:lastCreator,additionalData2:newCreator})) + } + + //to dm + const creator = await opendiscord.tickets.getTicketUser(ticket,"creator") + if (creator && generalConfig.data.logs.logMessages.transferring.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"transfer",reason,additionalData:lastCreator,additionalData2:newCreator})) + }), new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => { const {guild,channel,user,ticket,newCreator} = params diff --git a/src/actions/updateTicketPriority.ts b/src/actions/updateTicketPriority.ts index de3c041..3112b52 100644 --- a/src/actions/updateTicketPriority.ts +++ b/src/actions/updateTicketPriority.ts @@ -51,7 +51,19 @@ export async function registerActions(){ openticketUtils.updateTicketMessage(guild,channel,user,ticket) }), new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => { - const {guild,channel,user,ticket} = params + const {guild,channel,user,ticket,reason,newPriority} = params + + const renderedPriority = newPriority.renderDisplayName() + + //to logs + if (generalConfig.data.logs.enabled && generalConfig.data.logs.logMessages.priorityChange.logs){ + const logChannel = opendiscord.posts.get("opendiscord:logs") + if (logChannel) logChannel.send(await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,ticket,mode:"priority",reason,additionalData:renderedPriority})) + } + + //to dm + const creator = await opendiscord.tickets.getTicketUser(ticket,"creator") + if (creator && generalConfig.data.logs.logMessages.priorityChange.dm) await opendiscord.client.sendUserDm(creator,await opendiscord.builders.messages.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,ticket,mode:"priority",reason,additionalData:renderedPriority})) }), new api.ODWorker("opendiscord:logs",0,(instance,params,origin,cancel) => { const {guild,channel,user,ticket,newPriority} = params diff --git a/src/builders/embeds.ts b/src/builders/embeds.ts index d3ce6a4..1693999 100644 --- a/src/builders/embeds.ts +++ b/src/builders/embeds.ts @@ -812,7 +812,7 @@ const ticketEmbeds = () => { embeds.add(new api.ODEmbed("opendiscord:ticket-action-dm")) embeds.get("opendiscord:ticket-action-dm").workers.add( new api.ODWorker("opendiscord:ticket-action-dm",0,async (instance,params,origin) => { - const {user,mode,ticket,reason,additionalData} = params + const {user,mode,ticket,reason,additionalData,additionalData2} = params const channel = await opendiscord.tickets.getTicketChannel(ticket) instance.setColor(generalConfig.data.mainColor) @@ -853,6 +853,12 @@ const ticketEmbeds = () => { }else if (mode == "remove"){ instance.setTitle(utilities.emojiTitle("👤",lang.getTranslation("actions.titles.remove"))) instance.setDescription(lang.getTranslationWithParams("actions.logs.removeDm",[(additionalData instanceof discord.User ? discord.userMention(additionalData.id) : "")])) + }else if (mode == "priority"){ + instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.prioritySet"))) + instance.setDescription(lang.getTranslationWithParams("actions.logs.prioritySetDm",[(typeof additionalData === "string" ? "**"+additionalData+"**" : "****")])) + }else if (mode == "transfer"){ + instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.transfer"))) + instance.setDescription(lang.getTranslationWithParams("actions.logs.transferDm",[(additionalData instanceof discord.User ? discord.userMention(additionalData.id) : ""),(additionalData2 instanceof discord.User ? discord.userMention(additionalData2.id) : "")])) } }) ) @@ -861,7 +867,7 @@ const ticketEmbeds = () => { embeds.add(new api.ODEmbed("opendiscord:ticket-action-logs")) embeds.get("opendiscord:ticket-action-logs").workers.add( new api.ODWorker("opendiscord:ticket-action-logs",0,async (instance,params,origin) => { - const {user,mode,ticket,reason,additionalData} = params + const {user,mode,ticket,reason,additionalData,additionalData2} = params const channel = await opendiscord.tickets.getTicketChannel(ticket) instance.setColor(generalConfig.data.mainColor) @@ -907,6 +913,12 @@ const ticketEmbeds = () => { }else if (mode == "remove"){ instance.setTitle(utilities.emojiTitle("👤",lang.getTranslation("actions.titles.remove"))) instance.setDescription(lang.getTranslationWithParams("actions.logs.removeLog",[(additionalData instanceof discord.User ? discord.userMention(additionalData.id) : ""),discord.userMention(user.id)])) + }else if (mode == "priority"){ + instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.prioritySet"))) + instance.setDescription(lang.getTranslationWithParams("actions.logs.prioritySetLog",[(typeof additionalData === "string" ? "**"+additionalData+"**" : "****"),discord.userMention(user.id)])) + }else if (mode == "transfer"){ + instance.setTitle(utilities.emojiTitle("🚨",lang.getTranslation("actions.titles.transfer"))) + instance.setDescription(lang.getTranslationWithParams("actions.logs.transferLog",[(additionalData instanceof discord.User ? discord.userMention(additionalData.id) : ""),(additionalData2 instanceof discord.User ? discord.userMention(additionalData2.id) : ""),discord.userMention(user.id)])) } }) ) diff --git a/src/builders/messages.ts b/src/builders/messages.ts index e4637ae..4250347 100644 --- a/src/builders/messages.ts +++ b/src/builders/messages.ts @@ -566,8 +566,8 @@ const ticketMessages = () => { messages.add(new api.ODMessage("opendiscord:ticket-action-dm")) messages.get("opendiscord:ticket-action-dm").workers.add( new api.ODWorker("opendiscord:ticket-action-dm",0,async (instance,params,origin) => { - const {guild,channel,user,mode,ticket,reason,additionalData} = params - instance.addEmbed(await embeds.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,mode,ticket,reason,additionalData})) + const {guild,channel,user,mode,ticket,reason,additionalData,additionalData2} = params + instance.addEmbed(await embeds.getSafe("opendiscord:ticket-action-dm").build(origin,{guild,channel,user,mode,ticket,reason,additionalData,additionalData2})) }) ) @@ -575,8 +575,8 @@ const ticketMessages = () => { messages.add(new api.ODMessage("opendiscord:ticket-action-logs")) messages.get("opendiscord:ticket-action-logs").workers.add( new api.ODWorker("opendiscord:ticket-action-logs",0,async (instance,params,origin) => { - const {guild,channel,user,mode,ticket,reason,additionalData} = params - instance.addEmbed(await embeds.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,mode,ticket,reason,additionalData})) + const {guild,channel,user,mode,ticket,reason,additionalData,additionalData2} = params + instance.addEmbed(await embeds.getSafe("opendiscord:ticket-action-logs").build(origin,{guild,channel,user,mode,ticket,reason,additionalData,additionalData2})) }) ) } diff --git a/src/core/main.ts b/src/core/main.ts index b0132e6..dabccc8 100644 --- a/src/core/main.ts +++ b/src/core/main.ts @@ -1,6 +1,8 @@ /////////////////////////////////////// //OPEN TICKET MAIN MODULE /////////////////////////////////////// +import fs from "fs" +import path from "path" import * as api from "./api.js" import * as utilities from "@open-discord-bots/framework/utilities" @@ -108,7 +110,7 @@ export class ODOpenTicketMain extends api.ODMain { },"openticket") this.livestatus.useMain(this) - this.versions.add(api.ODVersion.fromString("opendiscord:version","v4.2.0")) + this.versions.add(api.ODVersion.fromString("opendiscord:version",this.readVersionFromPackage())) this.versions.add(api.ODVersion.fromString("opendiscord:transcripts","v2.1.0")) //OPEN TICKET @@ -134,4 +136,9 @@ export class ODOpenTicketMain extends api.ODMain { this.roles = new api.ODRoleManager(debug) this.priorities = new api.ODMappedPriorityManager(debug) } + + private readVersionFromPackage(): string { + const packageJson: {version:string} = JSON.parse(fs.readFileSync(path.join(process.cwd(),"./package.json")).toString()) + return "v"+packageJson.version + } } \ No newline at end of file diff --git a/src/core/mappings/builder.ts b/src/core/mappings/builder.ts index f1dded3..2094cc4 100644 --- a/src/core/mappings/builder.ts +++ b/src/core/mappings/builder.ts @@ -111,8 +111,8 @@ export interface ODEmbedManagerIdMappings extends api.ODEmbedManagerIdConstraint "opendiscord:move-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:ODTicketOption},workers:"opendiscord:move-message"}, "opendiscord:add-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:discord.User},workers:"opendiscord:add-message"}, "opendiscord:remove-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:discord.User},workers:"opendiscord:remove-message"}, - "opendiscord:ticket-action-dm":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption},workers:"opendiscord:ticket-action-dm"}, - "opendiscord:ticket-action-logs":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption},workers:"opendiscord:ticket-action-logs"}, + "opendiscord:ticket-action-dm":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"priority-message"|"topic-message"|"transfer-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove"|"priority"|"transfer"|"topic",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption,additionalData2?:discord.User},workers:"opendiscord:ticket-action-dm"}, + "opendiscord:ticket-action-logs":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"priority-message"|"topic-message"|"transfer-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove"|"priority"|"transfer"|"topic",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption,additionalData2?:discord.User},workers:"opendiscord:ticket-action-logs"}, "opendiscord:blacklist-view":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:blacklist-view"}, "opendiscord:blacklist-get":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,data:discord.User},workers:"opendiscord:blacklist-get"}, @@ -196,8 +196,8 @@ export interface ODMessageManagerIdMappings extends api.ODMessageManagerIdConstr "opendiscord:move-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:ODTicketOption},workers:"opendiscord:move-message"}, "opendiscord:add-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:discord.User},workers:"opendiscord:add-message"}, "opendiscord:remove-message":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,data:discord.User},workers:"opendiscord:remove-message"}, - "opendiscord:ticket-action-dm":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption},workers:"opendiscord:ticket-action-dm"}, - "opendiscord:ticket-action-logs":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption},workers:"opendiscord:ticket-action-logs"}, + "opendiscord:ticket-action-dm":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"priority-message"|"topic-message"|"transfer-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove"|"priority"|"transfer"|"topic",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption,additionalData2?:discord.User},workers:"opendiscord:ticket-action-dm"}, + "opendiscord:ticket-action-logs":{origin:"slash"|"text"|"ticket-message"|"close-message"|"reopen-message"|"delete-message"|"claim-message"|"unclaim-message"|"pin-message"|"unpin-message"|"autoclose-message"|"priority-message"|"topic-message"|"transfer-message"|"autoclose"|"autodelete"|"clear"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,mode:"close"|"reopen"|"delete"|"claim"|"unclaim"|"pin"|"unpin"|"rename"|"move"|"add"|"remove"|"priority"|"transfer"|"topic",ticket:ODTicket,reason:string|null,additionalData:null|string|discord.User|ODTicketOption,additionalData2?:discord.User},workers:"opendiscord:ticket-action-logs"}, "opendiscord:blacklist-view":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:blacklist-view"}, "opendiscord:blacklist-get":{origin:"slash"|"text"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,data:discord.User},workers:"opendiscord:blacklist-get"},