(v4.2.0) Added closed ticket channel emoij (#199)
This commit is contained in:
@@ -78,7 +78,7 @@
|
|||||||
"alwaysShowReason":false, //Show reason even if none is provided
|
"alwaysShowReason":false, //Show reason even if none is provided
|
||||||
"emojiStyle":"before", //The style of emoji's in embeds. Choices: before, after, double, disabled
|
"emojiStyle":"before", //The style of emoji's in embeds. Choices: before, after, double, disabled
|
||||||
"pinEmoji":"📌", //Channel emoji of pinned tickets (Leave empty to disable)
|
"pinEmoji":"📌", //Channel emoji of pinned tickets (Leave empty to disable)
|
||||||
"closeEmoji":"🔒", //Channel emoji of closed tickets (Leave empty to disable)
|
"closeEmoji":"", //Channel emoji of closed tickets (Leave empty to disable)
|
||||||
|
|
||||||
"replyOnTicketCreation":true, //Reply with a msg when a ticket is created
|
"replyOnTicketCreation":true, //Reply with a msg when a ticket is created
|
||||||
"replyOnReactionRole":true, //Reply with a msg when a reaction role is used
|
"replyOnReactionRole":true, //Reply with a msg when a reaction role is used
|
||||||
|
|||||||
@@ -20,9 +20,10 @@ export async function registerActions(){
|
|||||||
|
|
||||||
//calculate status emojis
|
//calculate status emojis
|
||||||
const pinEmoji = (ticket && ticket.get("opendiscord:pinned").value) ? generalConfig.data.ticketSystem.pinEmoji : ""
|
const pinEmoji = (ticket && ticket.get("opendiscord:pinned").value) ? generalConfig.data.ticketSystem.pinEmoji : ""
|
||||||
|
const closeEmoji = (ticket && ticket.get("opendiscord:closed").value) ? generalConfig.data.ticketSystem.closeEmoji : ""
|
||||||
const priorityEmoji = (ticket) ? (opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? "") : ""
|
const priorityEmoji = (ticket) ? (opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value).channelEmoji ?? "") : ""
|
||||||
|
|
||||||
instance.newChannelName = pinEmoji+priorityEmoji+baseChannelName
|
instance.newChannelName = pinEmoji+closeEmoji+priorityEmoji+baseChannelName
|
||||||
instance.newChannelSuffix = channelSuffix
|
instance.newChannelSuffix = channelSuffix
|
||||||
instance.shouldChangeName = (instance.newChannelName !== currentChannelName)
|
instance.shouldChangeName = (instance.newChannelName !== currentChannelName)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -58,6 +58,25 @@ export async function registerActions(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//calculate channel name
|
||||||
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("close-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
|
const newName = channelNameResult.newChannelName
|
||||||
|
try{
|
||||||
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
|
opendiscord.log("Failed to rename channel on ticket close","error")
|
||||||
|
})
|
||||||
|
}catch(err){
|
||||||
|
opendiscord.log("Unable to rename channel while closing ticket! Waiting until ratelimit expires...","warning",[
|
||||||
|
{key:"oldName",value:originalName},
|
||||||
|
{key:"newName",value:newName}
|
||||||
|
])
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-close",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//update permissions (non-staff => readonly)
|
//update permissions (non-staff => readonly)
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
|
|||||||
@@ -63,6 +63,25 @@ export async function registerActions(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//calculate channel name
|
||||||
|
const channelNameResult = await opendiscord.actions.get("opendiscord:calculate-ticket-name").run("reopen-ticket",{guild,user,option:ticket.option,channel,ticket,currentChannelName:channel.name})
|
||||||
|
if (channelNameResult && channelNameResult.shouldChangeName && typeof channelNameResult.newChannelName !== "undefined"){
|
||||||
|
const originalName = channel.name
|
||||||
|
const newName = channelNameResult.newChannelName
|
||||||
|
try{
|
||||||
|
await utilities.timedAwait(channel.setName(newName),2500,(err) => {
|
||||||
|
opendiscord.log("Failed to rename channel on ticket reopen","error")
|
||||||
|
})
|
||||||
|
}catch(err){
|
||||||
|
opendiscord.log("Unable to rename channel while reopening ticket! Waiting until ratelimit expires...","warning",[
|
||||||
|
{key:"oldName",value:originalName},
|
||||||
|
{key:"newName",value:newName}
|
||||||
|
])
|
||||||
|
const sentMsg = await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:error-channel-rename").build("ticket-reopen",{guild,channel,user,originalName,newName})).message)
|
||||||
|
setTimeout(() => {if (sentMsg.deletable) sentMsg.delete()},7000) //autodelete error message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//update permissions
|
//update permissions
|
||||||
const permissions: discord.OverwriteResolvable[] = [{
|
const permissions: discord.OverwriteResolvable[] = [{
|
||||||
type:discord.OverwriteType.Role,
|
type:discord.OverwriteType.Role,
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ const errorEmbeds = () => {
|
|||||||
new api.ODWorker("opendiscord:error-channel-rename",0,async (instance,params,origin) => {
|
new api.ODWorker("opendiscord:error-channel-rename",0,async (instance,params,origin) => {
|
||||||
const {channel,user,originalName,newName} = params
|
const {channel,user,originalName,newName} = params
|
||||||
|
|
||||||
const method = (origin == "ticket-move" || origin == "ticket-pin" || origin == "ticket-rename" || origin == "ticket-unpin" || origin == "ticket-priority" || origin == "ticket-transfer") ? origin : getMethodFromOrigin(origin)
|
const method = (origin == "ticket-move" || origin == "ticket-pin" || origin == "ticket-close" || origin == "ticket-reopen" || origin == "ticket-rename" || origin == "ticket-unpin" || origin == "ticket-priority" || origin == "ticket-transfer") ? origin : getMethodFromOrigin(origin)
|
||||||
|
|
||||||
instance.setColor(generalConfig.data.ticketSystem.useRedErrorEmbeds ? "Red" : generalConfig.data.mainColor)
|
instance.setColor(generalConfig.data.ticketSystem.useRedErrorEmbeds ? "Red" : generalConfig.data.mainColor)
|
||||||
instance.setTitle(utilities.emojiTitle("❌",lang.getTranslation("errors.titles.channelRename")))
|
instance.setTitle(utilities.emojiTitle("❌",lang.getTranslation("errors.titles.channelRename")))
|
||||||
|
|||||||
@@ -1253,7 +1253,7 @@ async function saveQuickSetupConfig(){
|
|||||||
alwaysShowReason:false,
|
alwaysShowReason:false,
|
||||||
emojiStyle:quickSetupStorage.emojiStyle ?? "before",
|
emojiStyle:quickSetupStorage.emojiStyle ?? "before",
|
||||||
pinEmoji:"📌",
|
pinEmoji:"📌",
|
||||||
closeEmoji:"🔒",
|
closeEmoji:"",
|
||||||
|
|
||||||
replyOnTicketCreation:true,
|
replyOnTicketCreation:true,
|
||||||
replyOnReactionRole:true,
|
replyOnReactionRole:true,
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ export interface ODEmbedManagerIdMappings extends api.ODEmbedManagerIdConstraint
|
|||||||
"opendiscord:error-option-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
"opendiscord:error-option-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
||||||
"opendiscord:error-panel-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
"opendiscord:error-panel-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
||||||
"opendiscord:error-not-in-guild":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
"opendiscord:error-not-in-guild":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
||||||
"opendiscord:error-channel-rename":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
"opendiscord:error-channel-rename":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-close"|"ticket-reopen"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||||
"opendiscord:error-channel-category":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-create"|"ticket-close"|"ticket-reopen"|"ticket-claim"|"ticket-unclaim"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalCategory:string,newCategory:string},workers:"opendiscord:error-channel-category"},
|
"opendiscord:error-channel-category":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-create"|"ticket-close"|"ticket-reopen"|"ticket-claim"|"ticket-unclaim"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalCategory:string,newCategory:string},workers:"opendiscord:error-channel-category"},
|
||||||
"opendiscord:error-ticket-busy":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
"opendiscord:error-ticket-busy":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ export interface ODMessageManagerIdMappings extends api.ODMessageManagerIdConstr
|
|||||||
"opendiscord:error-option-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
"opendiscord:error-option-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-option-unknown"},
|
||||||
"opendiscord:error-panel-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
"opendiscord:error-panel-unknown":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-panel-unknown"},
|
||||||
"opendiscord:error-not-in-guild":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
"opendiscord:error-not-in-guild":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-not-in-guild"},
|
||||||
"opendiscord:error-channel-rename":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
"opendiscord:error-channel-rename":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-pin"|"ticket-unpin"|"ticket-close"|"ticket-reopen"|"ticket-rename"|"ticket-move"|"ticket-priority"|"ticket-transfer"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalName:string,newName:string},workers:"opendiscord:error-channel-rename"},
|
||||||
"opendiscord:error-channel-category":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-create"|"ticket-close"|"ticket-reopen"|"ticket-claim"|"ticket-unclaim"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalCategory:string,newCategory:string},workers:"opendiscord:error-channel-category"},
|
"opendiscord:error-channel-category":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"ticket-create"|"ticket-close"|"ticket-reopen"|"ticket-claim"|"ticket-unclaim"|"ticket-move"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User,originalCategory:string,newCategory:string},workers:"opendiscord:error-channel-category"},
|
||||||
"opendiscord:error-ticket-busy":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
"opendiscord:error-ticket-busy":{origin:"slash"|"text"|"button"|"dropdown"|"modal"|"other",params:{guild:discord.Guild|null,channel:discord.TextBasedChannel,user:discord.User},workers:"opendiscord:error-ticket-busy"},
|
||||||
|
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ export const migrations = [
|
|||||||
|
|
||||||
if (!generalConfig.data["system"]) throw new api.ODSystemError("Couldn't find general.jsonc 'system' category.")
|
if (!generalConfig.data["system"]) throw new api.ODSystemError("Couldn't find general.jsonc 'system' category.")
|
||||||
generalConfig.data.ticketSystem = generalConfig.data["system"]
|
generalConfig.data.ticketSystem = generalConfig.data["system"]
|
||||||
generalConfig.data.ticketSystem.closeEmoji = "🔒"
|
generalConfig.data.ticketSystem.closeEmoji = ""
|
||||||
generalConfig.data.ticketSystem.askPriorityOnTicketCreation = true
|
generalConfig.data.ticketSystem.askPriorityOnTicketCreation = true
|
||||||
generalConfig.data.ticketSystem.enableCreateTicketForOtherUser = true
|
generalConfig.data.ticketSystem.enableCreateTicketForOtherUser = true
|
||||||
delete generalConfig.data["system"]
|
delete generalConfig.data["system"]
|
||||||
|
|||||||
+5
-1
@@ -525,12 +525,16 @@ const main = async () => {
|
|||||||
await opendiscord.events.get("onStateLoad").emit([opendiscord.states])
|
await opendiscord.events.get("onStateLoad").emit([opendiscord.states])
|
||||||
await opendiscord.events.get("afterStatesLoaded").emit([opendiscord.states])
|
await opendiscord.events.get("afterStatesLoaded").emit([opendiscord.states])
|
||||||
|
|
||||||
//init states
|
//init states (async to prevent blocking startup)
|
||||||
|
utilities.runAsync(async () => {
|
||||||
|
opendiscord.log("Initiating states...","system")
|
||||||
await opendiscord.events.get("onStateInit").emit([opendiscord.states])
|
await opendiscord.events.get("onStateInit").emit([opendiscord.states])
|
||||||
if (opendiscord.sharedFuses.getFuse("stateInitiating")){
|
if (opendiscord.sharedFuses.getFuse("stateInitiating")){
|
||||||
await opendiscord.states.init()
|
await opendiscord.states.init()
|
||||||
await opendiscord.events.get("afterStatesInitiated").emit([opendiscord.states])
|
await opendiscord.events.get("afterStatesInitiated").emit([opendiscord.states])
|
||||||
}
|
}
|
||||||
|
opendiscord.log("Message states ready!","info")
|
||||||
|
})
|
||||||
|
|
||||||
//plugin loading before managers
|
//plugin loading before managers
|
||||||
await opendiscord.events.get("onPluginBeforeManagerLoad").emit([])
|
await opendiscord.events.get("onPluginBeforeManagerLoad").emit([])
|
||||||
|
|||||||
Reference in New Issue
Block a user