From fd3bc0e7b97270c01b9ecf695163332c4e8367f9 Mon Sep 17 00:00:00 2001 From: DJj123dj <80536295+DJj123dj@users.noreply.github.com> Date: Thu, 27 Mar 2025 16:30:37 +0100 Subject: [PATCH] API: allowCategoryChange param in related actions Added the 'allowCategoryChange' parameter in related ticket actions (claim, unclaim, close, reopen) to disable the changing of the category. This can be used by plugins not wanting the category of the channel to change. --- src/actions/claimTicket.ts | 30 ++++++----- src/actions/closeTicket.ts | 28 +++++----- src/actions/reopenTicket.ts | 88 ++++++++++++++++---------------- src/actions/unclaimTicket.ts | 90 +++++++++++++++++---------------- src/core/api/defaults/action.ts | 8 +-- 5 files changed, 126 insertions(+), 118 deletions(-) diff --git a/src/actions/claimTicket.ts b/src/actions/claimTicket.ts index 8900296..cb82ed4 100644 --- a/src/actions/claimTicket.ts +++ b/src/actions/claimTicket.ts @@ -26,20 +26,22 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-claimed",user.id,1,"increase") //update category - const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id) - const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null - if (claimCategory){ - try { - channel.setParent(claimCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "claimed" - ticket.get("opendiscord:category").value = claimCategory - }catch(e){ - opendiscord.log("Unable to move ticket to 'claimed category'!","error",[ - {key:"channel",value:"#"+channel.name}, - {key:"channelid",value:channel.id,hidden:true}, - {key:"categoryid",value:claimCategory} - ]) - opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + if (params.allowCategoryChange){ + const rawClaimCategory = ticket.option.get("opendiscord:channel-categories-claimed").value.find((c) => c.user == user.id) + const claimCategory = (rawClaimCategory) ? rawClaimCategory.category : null + if (claimCategory){ + try { + channel.setParent(claimCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "claimed" + ticket.get("opendiscord:category").value = claimCategory + }catch(e){ + opendiscord.log("Unable to move ticket to 'claimed category'!","error",[ + {key:"channel",value:"#"+channel.name}, + {key:"channelid",value:channel.id,hidden:true}, + {key:"categoryid",value:claimCategory} + ]) + opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + } } } diff --git a/src/actions/closeTicket.ts b/src/actions/closeTicket.ts index 5481fb7..c442b86 100644 --- a/src/actions/closeTicket.ts +++ b/src/actions/closeTicket.ts @@ -28,19 +28,21 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-closed",user.id,1,"increase") //update category - const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value - if (closeCategory !== ""){ - try { - channel.setParent(closeCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "closed" - ticket.get("opendiscord:category").value = closeCategory - }catch(e){ - opendiscord.log("Unable to move ticket to 'closed category'!","error",[ - {key:"channel",value:"#"+channel.name}, - {key:"channelid",value:channel.id,hidden:true}, - {key:"categoryid",value:closeCategory} - ]) - opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + if (params.allowCategoryChange){ + const closeCategory = ticket.option.get("opendiscord:channel-category-closed").value + if (closeCategory !== ""){ + try { + channel.setParent(closeCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "closed" + ticket.get("opendiscord:category").value = closeCategory + }catch(e){ + opendiscord.log("Unable to move ticket to 'closed category'!","error",[ + {key:"channel",value:"#"+channel.name}, + {key:"channelid",value:channel.id,hidden:true}, + {key:"categoryid",value:closeCategory} + ]) + opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + } } } diff --git a/src/actions/reopenTicket.ts b/src/actions/reopenTicket.ts index 70d3c36..d80878c 100644 --- a/src/actions/reopenTicket.ts +++ b/src/actions/reopenTicket.ts @@ -28,53 +28,55 @@ export const registerActions = async () => { await opendiscord.stats.get("opendiscord:user").setStat("opendiscord:tickets-reopened",user.id,1,"increase") //update category - const channelCategory = ticket.option.get("opendiscord:channel-category").value - const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value - if (channelCategory !== ""){ - //category enabled - try { - const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory) - if (!normalCategory){ - //default category was not found - opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[ - {key:"categoryid",value:channelCategory}, - {key:"backup",value:"false"} - ]) - }else{ - //default category was found - if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ - //use backup category - const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory) - if (!backupCategory){ - //default category was not found - opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[ - {key:"categoryid",value:channelBackupCategory}, - {key:"backup",value:"true"} - ]) - }else{ - //use backup category - channel.setParent(backupCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "backup" - ticket.get("opendiscord:category").value = backupCategory.id - } + if (params.allowCategoryChange){ + const channelCategory = ticket.option.get("opendiscord:channel-category").value + const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value + if (channelCategory !== ""){ + //category enabled + try { + const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory) + if (!normalCategory){ + //default category was not found + opendiscord.log("Ticket Reopening Error: Unable to find category! #1","error",[ + {key:"categoryid",value:channelCategory}, + {key:"backup",value:"false"} + ]) }else{ - //use default category - channel.setParent(normalCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "normal" - ticket.get("opendiscord:category").value = normalCategory.id + //default category was found + if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ + //use backup category + const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory) + if (!backupCategory){ + //default category was not found + opendiscord.log("Ticket Reopening Error: Unable to find category! #2","error",[ + {key:"categoryid",value:channelBackupCategory}, + {key:"backup",value:"true"} + ]) + }else{ + //use backup category + channel.setParent(backupCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "backup" + ticket.get("opendiscord:category").value = backupCategory.id + } + }else{ + //use default category + channel.setParent(normalCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "normal" + ticket.get("opendiscord:category").value = normalCategory.id + } } + }catch(e){ + opendiscord.log("Unable to move ticket to 'reopened category'!","error",[ + {key:"channel",value:"#"+channel.name}, + {key:"channelid",value:channel.id,hidden:true}, + ]) + opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) } - }catch(e){ - opendiscord.log("Unable to move ticket to 'reopened category'!","error",[ - {key:"channel",value:"#"+channel.name}, - {key:"channelid",value:channel.id,hidden:true}, - ]) - opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + }else{ + channel.setParent(null,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = null + ticket.get("opendiscord:category").value = null } - }else{ - channel.setParent(null,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = null - ticket.get("opendiscord:category").value = null } //update permissions diff --git a/src/actions/unclaimTicket.ts b/src/actions/unclaimTicket.ts index 8972228..d9b391c 100644 --- a/src/actions/unclaimTicket.ts +++ b/src/actions/unclaimTicket.ts @@ -22,54 +22,56 @@ export const registerActions = async () => { ticket.get("opendiscord:busy").value = true //update category - const channelCategory = ticket.option.get("opendiscord:channel-category").value - const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value - if (channelCategory !== ""){ - //category enabled - try { - const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory) - if (!normalCategory){ - //default category was not found - opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[ - {key:"categoryid",value:channelCategory}, - {key:"backup",value:"false"} - ]) - }else{ - //default category was found - if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ - //use backup category - const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory) - if (!backupCategory){ - //default category was not found - opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[ - {key:"categoryid",value:channelBackupCategory}, - {key:"backup",value:"true"} - ]) - }else{ - //use backup category - channel.setParent(backupCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "backup" - ticket.get("opendiscord:category").value = backupCategory.id - } + if (params.allowCategoryChange){ + const channelCategory = ticket.option.get("opendiscord:channel-category").value + const channelBackupCategory = ticket.option.get("opendiscord:channel-category-backup").value + if (channelCategory !== ""){ + //category enabled + try { + const normalCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelCategory) + if (!normalCategory){ + //default category was not found + opendiscord.log("Ticket Unclaiming Error: Unable to find category! #1","error",[ + {key:"categoryid",value:channelCategory}, + {key:"backup",value:"false"} + ]) }else{ - //use default category - channel.setParent(normalCategory,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = "normal" - ticket.get("opendiscord:category").value = normalCategory.id + //default category was found + if (normalCategory.children.cache.size >= 49 && channelBackupCategory != ""){ + //use backup category + const backupCategory = await opendiscord.client.fetchGuildCategoryChannel(guild,channelBackupCategory) + if (!backupCategory){ + //default category was not found + opendiscord.log("Ticket Unclaiming Error: Unable to find category! #2","error",[ + {key:"categoryid",value:channelBackupCategory}, + {key:"backup",value:"true"} + ]) + }else{ + //use backup category + channel.setParent(backupCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "backup" + ticket.get("opendiscord:category").value = backupCategory.id + } + }else{ + //use default category + channel.setParent(normalCategory,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = "normal" + ticket.get("opendiscord:category").value = normalCategory.id + } } + + }catch(e){ + opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[ + {key:"channel",value:"#"+channel.name}, + {key:"channelid",value:channel.id,hidden:true} + ]) + opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) } - - }catch(e){ - opendiscord.log("Unable to move ticket to 'unclaimed category'!","error",[ - {key:"channel",value:"#"+channel.name}, - {key:"channelid",value:channel.id,hidden:true} - ]) - opendiscord.debugfile.writeErrorMessage(new api.ODError(e,"uncaughtException")) + }else{ + channel.setParent(null,{lockPermissions:false}) + ticket.get("opendiscord:category-mode").value = null + ticket.get("opendiscord:category").value = null } - }else{ - channel.setParent(null,{lockPermissions:false}) - ticket.get("opendiscord:category-mode").value = null - ticket.get("opendiscord:category").value = null } //update ticket message diff --git a/src/core/api/defaults/action.ts b/src/core/api/defaults/action.ts index 808724e..842ec62 100644 --- a/src/core/api/defaults/action.ts +++ b/src/core/api/defaults/action.ts @@ -36,7 +36,7 @@ export interface ODActionManagerIds_Default { }, "opendiscord:close-ticket":{ source:"slash"|"text"|"ticket-message"|"reopen-message"|"autoclose"|"other", - params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean}, + params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean}, result:{}, workers:"opendiscord:close-ticket"|"opendiscord:discord-logs"|"opendiscord:logs" }, @@ -48,19 +48,19 @@ export interface ODActionManagerIds_Default { }, "opendiscord:reopen-ticket":{ source:"slash"|"text"|"ticket-message"|"close-message"|"autoclose-message"|"other", - params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean}, + params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean}, result:{}, workers:"opendiscord:reopen-ticket"|"opendiscord:discord-logs"|"opendiscord:logs" }, "opendiscord:claim-ticket":{ source:"slash"|"text"|"ticket-message"|"unclaim-message"|"other", - params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean}, + params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean}, result:{}, workers:"opendiscord:claim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs" }, "opendiscord:unclaim-ticket":{ source:"slash"|"text"|"ticket-message"|"claim-message"|"other", - params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean}, + params:{guild:discord.Guild,channel:discord.GuildTextBasedChannel,user:discord.User,ticket:ODTicket,reason:string|null,sendMessage:boolean,allowCategoryChange?:boolean}, result:{}, workers:"opendiscord:unclaim-ticket"|"opendiscord:discord-logs"|"opendiscord:logs" },