(v4.2.0) Added priority dropdown

This commit is contained in:
DJj123dj
2026-05-24 19:48:46 +02:00
parent eb44f41d3a
commit 58a6bcde45
9 changed files with 85 additions and 2 deletions
+3
View File
@@ -46,6 +46,9 @@ export async function registerActions(){
//update channel topic //update channel topic
await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null}) await opendiscord.actions.get("opendiscord:update-ticket-topic").run("ticket-action",{guild,channel,user,ticket,sendMessage:false,newTopic:null})
//update ticket message (no await)
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
}), }),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => { new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
+3
View File
@@ -46,6 +46,9 @@ export async function registerActions(){
if (params.sendMessage && newTopic) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:topic-set").build(origin,{guild,channel,user,ticket,topic:newTopic})).message) if (params.sendMessage && newTopic) await channel.send((await opendiscord.builders.messages.getSafe("opendiscord:topic-set").build(origin,{guild,channel,user,ticket,topic:newTopic})).message)
ticket.get("opendiscord:busy").value = false ticket.get("opendiscord:busy").value = false
if (newTopic) await opendiscord.events.get("afterTicketTopicChanged").emit([ticket,user,channel,oldTopic,newTopic]) if (newTopic) await opendiscord.events.get("afterTicketTopicChanged").emit([ticket,user,channel,oldTopic,newTopic])
//update ticket message (no await)
openticketUtils.updateTicketMessage(guild,channel,user,ticket)
}), }),
new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => { new api.ODWorker("opendiscord:discord-logs",1,async (instance,params,origin,cancel) => {
const {guild,channel,user,ticket} = params const {guild,channel,user,ticket} = params
+27 -1
View File
@@ -5,13 +5,14 @@ import {opendiscord, api, utilities} from "../index.js"
import * as discord from "discord.js" import * as discord from "discord.js"
const dropdowns = opendiscord.builders.dropdowns const dropdowns = opendiscord.builders.dropdowns
const lang = opendiscord.languages
export async function registerAllDropdowns(){ export async function registerAllDropdowns(){
panelDropdowns() panelDropdowns()
} }
const panelDropdowns = () => { const panelDropdowns = () => {
//TICKET OPTION //PANEL DROPDOWN
dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown")) dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown"))
dropdowns.get("opendiscord:panel-dropdown").workers.add( dropdowns.get("opendiscord:panel-dropdown").workers.add(
new api.ODWorker("opendiscord:panel-dropdown",0,async (instance,params) => { new api.ODWorker("opendiscord:panel-dropdown",0,async (instance,params) => {
@@ -65,4 +66,29 @@ const panelDropdowns = () => {
instance.setOptions(parsedOptions) instance.setOptions(parsedOptions)
}) })
) )
//PRIORITY DROPDOWN
dropdowns.add(new api.ODDropdown("opendiscord:priority-dropdown"))
dropdowns.get("opendiscord:priority-dropdown").workers.add(
new api.ODWorker("opendiscord:priority-dropdown",0,async (instance,params) => {
const {ticket} = params
const parsedOptions: api.ODDropdownData["options"] = opendiscord.priorities.getAll().sort((a,b) => b.priority-a.priority).map((prio) => ({
label:prio.displayName,
emoji:prio.displayEmoji ?? undefined,
value:"od:select-priority|"+prio.rawName
}))
const currentPriority = opendiscord.priorities.getFromPriorityLevel(ticket.get("opendiscord:priority").value)
//TODO TRANSLATION!!!
const placeholder = (currentPriority.priority < 0) ? "Select priority level" : (lang.getTranslation("params.uppercase.priority")+": "+currentPriority.renderDisplayName())
instance.setCustomId("od:priority-dropdown")
instance.setType("string")
instance.setMaxValues(1)
instance.setMinValues(0)
instance.setPlaceholder(placeholder)
instance.setOptions(parsedOptions)
})
)
} }
+3
View File
@@ -438,6 +438,9 @@ const ticketMessages = () => {
} }
//enable ticket deletion //enable ticket deletion
if (generalConfig.data.ticketSystem.enableTicketDeleteButtons) instance.addComponent(await buttons.getSafe("opendiscord:delete-ticket").build("ticket-message",{guild,channel,user,ticket})) if (generalConfig.data.ticketSystem.enableTicketDeleteButtons) instance.addComponent(await buttons.getSafe("opendiscord:delete-ticket").build("ticket-message",{guild,channel,user,ticket}))
//add priority dropdown
if (generalConfig.data.ticketSystem.askPriorityOnTicketCreation) instance.addComponent(await dropdowns.getSafe("opendiscord:priority-dropdown").build(origin,{guild,channel,user,ticket}))
}), }),
new api.ODWorker("opendiscord:ticket-message-disable-components",2,async (instance,params,origin) => { new api.ODWorker("opendiscord:ticket-message-disable-components",2,async (instance,params,origin) => {
const {ticket} = params const {ticket} = params
+45
View File
@@ -61,3 +61,48 @@ export async function registerCommandResponders(){
}) })
]) ])
} }
export async function registerDropdownResponders(){
//PRIORITY DROPDOWN RESPONDER
opendiscord.responders.dropdowns.add(new api.ODDropdownResponder("opendiscord:priority-dropdown",/^od:priority-dropdown/))
opendiscord.responders.dropdowns.get("opendiscord:priority-dropdown").workers.add(
new api.ODWorker("opendiscord:priority-dropdown",0,async (instance,params,origin,cancel) => {
const {guild,channel,user,message} = instance
const match = /^od:select-priority\|([^|]+)/.exec(instance.values.getStringValues()[0])
if (!match) return
const priorityName = match[1]
const priority = opendiscord.priorities.getAll().find((lvl) => lvl.rawName === priorityName) ?? null
if (!priority){
instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:error").build("button",{guild,channel,user,layout:"simple",error:"Please select a valid priority level.",customTitle:"Unknown Priority Level"}))
return cancel()
}
//responder checks
const hasPerms = await openticketUtils.replyHasPermissions(instance,origin,"priority")
if (!hasPerms) return cancel()
const isInGuild = await openticketUtils.replyIsInGuild(instance,origin)
if (!isInGuild || !guild || channel.isDMBased()) return cancel()
const state = await openticketUtils.replyInteractiveMessageState(instance,origin,channel,message,"/priority")
if (!state) return cancel()
const ticket = await openticketUtils.replyIsTicket(instance,origin)
if (!ticket) return cancel()
const isAvailable = await openticketUtils.replyTicketIsAvailable(instance,origin,ticket)
if (!isAvailable) return cancel()
//fetch state details
const originalMsgOrigin = state.data.messageOrigin
const originalMsgType = state.data.messageType
//start changing ticket priority
await instance.defer("reply",false)
await opendiscord.actions.get("opendiscord:update-ticket-priority").run("other",{guild,channel,user,ticket,newPriority:priority,sendMessage:false,reason:null})
await instance.reply(await opendiscord.builders.messages.getSafe("opendiscord:priority-set").build("other",{guild,channel,user,ticket,priority,reason:null}))
})
)
}
+1 -1
View File
@@ -36,7 +36,7 @@ export class ODPriorityManager<IdList extends ODPriorityManagerIdConstraint = OD
/**Get an `ODPriorityLevel` from the priority level value. Returns a dummy value when the level doesn't exist. */ /**Get an `ODPriorityLevel` from the priority level value. Returns a dummy value when the level doesn't exist. */
getFromPriorityLevel(level:number){ getFromPriorityLevel(level:number){
return this.getAll().find((lvl) => lvl.priority === level) ?? new ODPriorityLevel("opendiscord:unknown",0,"unknown","UNKNOWN_PRIORITY","🚫","🚫") return this.getAll().find((lvl) => lvl.priority === level) ?? new ODPriorityLevel("opendiscord:unknown",-1,"unknown","UNKNOWN_PRIORITY","🚫","🚫")
} }
/**List the available priority levels. */ /**List the available priority levels. */
listAvailableLevels(){ listAvailableLevels(){
+1
View File
@@ -53,6 +53,7 @@ export interface ODButtonManagerIdMappings extends api.ODButtonManagerIdConstrai
*/ */
export interface ODDropdownManagerIdMappings extends api.ODDropdownManagerIdConstraint { export interface ODDropdownManagerIdMappings extends api.ODDropdownManagerIdConstraint {
"opendiscord:panel-dropdown":{origin:"slash"|"text"|"sub-panel"|"auto-update"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,panel:ODPanel,options:(ODTicketOption|ODRoleOption|ODSubPanelOption)[]},workers:"opendiscord:panel-dropdown"} "opendiscord:panel-dropdown":{origin:"slash"|"text"|"sub-panel"|"auto-update"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,panel:ODPanel,options:(ODTicketOption|ODRoleOption|ODSubPanelOption)[]},workers:"opendiscord:panel-dropdown"}
"opendiscord:priority-dropdown":{origin:"panel-button"|"panel-dropdown"|"slash"|"text"|"verifybar"|"other",params:{guild:discord.Guild,channel:discord.TextBasedChannel,user:discord.User,ticket:ODTicket},workers:"opendiscord:priority-dropdown"}
} }
/**## ODFileManagerIdMappings `interface` /**## ODFileManagerIdMappings `interface`
+1
View File
@@ -69,6 +69,7 @@ export interface ODButtonResponderManagerIdMappings extends api.ODButtonResponde
*/ */
export interface ODDropdownResponderManagerIdMappings extends api.ODDropdownResponderManagerIdConstraint { export interface ODDropdownResponderManagerIdMappings extends api.ODDropdownResponderManagerIdConstraint {
"opendiscord:panel-dropdown":{origin:"dropdown",params:{},workers:"opendiscord:dropdown-ticket"|"opendiscord:dropdown-role"|"opendiscord:dropdown-subpanel"}, "opendiscord:panel-dropdown":{origin:"dropdown",params:{},workers:"opendiscord:dropdown-ticket"|"opendiscord:dropdown-role"|"opendiscord:dropdown-subpanel"},
"opendiscord:priority-dropdown":{origin:"dropdown",params:{},workers:"opendiscord:priority-dropdown"},
} }
/**## ODModalResponderManagerIdMappings `interface` /**## ODModalResponderManagerIdMappings `interface`
+1
View File
@@ -744,6 +744,7 @@ const main = async () => {
opendiscord.log("Loading dropdown responders...","system") opendiscord.log("Loading dropdown responders...","system")
if (opendiscord.sharedFuses.getFuse("dropdownRespondersLoading")){ if (opendiscord.sharedFuses.getFuse("dropdownRespondersLoading")){
await (await import("./commands/panel.js")).registerDropdownResponders() await (await import("./commands/panel.js")).registerDropdownResponders()
await (await import("./commands/priority.js")).registerDropdownResponders()
} }
await opendiscord.events.get("onDropdownResponderLoad").emit([opendiscord.responders.dropdowns,opendiscord.responders,opendiscord.actions]) await opendiscord.events.get("onDropdownResponderLoad").emit([opendiscord.responders.dropdowns,opendiscord.responders,opendiscord.actions])
await opendiscord.events.get("afterDropdownRespondersLoaded").emit([opendiscord.responders.dropdowns,opendiscord.responders,opendiscord.actions]) await opendiscord.events.get("afterDropdownRespondersLoaded").emit([opendiscord.responders.dropdowns,opendiscord.responders,opendiscord.actions])