(v4.2.0) Added priority dropdown
This commit is contained in:
@@ -46,6 +46,9 @@ export async function registerActions(){
|
||||
|
||||
//update channel topic
|
||||
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) => {
|
||||
const {guild,channel,user,ticket} = params
|
||||
|
||||
@@ -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)
|
||||
ticket.get("opendiscord:busy").value = false
|
||||
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) => {
|
||||
const {guild,channel,user,ticket} = params
|
||||
|
||||
@@ -5,13 +5,14 @@ import {opendiscord, api, utilities} from "../index.js"
|
||||
import * as discord from "discord.js"
|
||||
|
||||
const dropdowns = opendiscord.builders.dropdowns
|
||||
const lang = opendiscord.languages
|
||||
|
||||
export async function registerAllDropdowns(){
|
||||
panelDropdowns()
|
||||
}
|
||||
|
||||
const panelDropdowns = () => {
|
||||
//TICKET OPTION
|
||||
//PANEL DROPDOWN
|
||||
dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown"))
|
||||
dropdowns.get("opendiscord:panel-dropdown").workers.add(
|
||||
new api.ODWorker("opendiscord:panel-dropdown",0,async (instance,params) => {
|
||||
@@ -65,4 +66,29 @@ const panelDropdowns = () => {
|
||||
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)
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -438,6 +438,9 @@ const ticketMessages = () => {
|
||||
}
|
||||
//enable ticket deletion
|
||||
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) => {
|
||||
const {ticket} = params
|
||||
|
||||
@@ -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}))
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -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. */
|
||||
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. */
|
||||
listAvailableLevels(){
|
||||
|
||||
@@ -53,6 +53,7 @@ export interface ODButtonManagerIdMappings extends api.ODButtonManagerIdConstrai
|
||||
*/
|
||||
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: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`
|
||||
|
||||
@@ -69,6 +69,7 @@ export interface ODButtonResponderManagerIdMappings extends api.ODButtonResponde
|
||||
*/
|
||||
export interface ODDropdownResponderManagerIdMappings extends api.ODDropdownResponderManagerIdConstraint {
|
||||
"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`
|
||||
|
||||
@@ -744,6 +744,7 @@ const main = async () => {
|
||||
opendiscord.log("Loading dropdown responders...","system")
|
||||
if (opendiscord.sharedFuses.getFuse("dropdownRespondersLoading")){
|
||||
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("afterDropdownRespondersLoaded").emit([opendiscord.responders.dropdowns,opendiscord.responders,opendiscord.actions])
|
||||
|
||||
Reference in New Issue
Block a user