Bugfixes & Improvements
Added "maximum buttons per row" in panels. Fixed reaction role reply glitching when replyOnReactionRole was disabled. Panel dropdowns now support reaction role & sub-panel options.
This commit is contained in:
+40
-14
@@ -12,23 +12,49 @@ export async function registerAllDropdowns(){
|
||||
|
||||
const panelDropdowns = () => {
|
||||
//TICKET OPTION
|
||||
dropdowns.add(new api.ODDropdown("opendiscord:panel-dropdown-tickets"))
|
||||
dropdowns.get("opendiscord:panel-dropdown-tickets").workers.add(
|
||||
new api.ODWorker("opendiscord:panel-dropdown-tickets",0,async (instance,params) => {
|
||||
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) => {
|
||||
const {panel,options} = params
|
||||
|
||||
const parsedOptions: api.ODDropdownData["options"] = options.map((option) => {
|
||||
const label = option.get("opendiscord:button-label").value.substring(0,100)
|
||||
const desc = option.get("opendiscord:description").value.substring(0,100)
|
||||
const emoji = option.get("opendiscord:button-emoji").value
|
||||
|
||||
return {
|
||||
label:(label.length > 0) ? label : "<no-label-provided>",
|
||||
value:"od:ticket-option|"+option.id.value,
|
||||
emoji:(emoji.length > 0) ? emoji : undefined,
|
||||
description:(desc.length > 0) ? desc : undefined,
|
||||
default:false
|
||||
}
|
||||
if (option instanceof api.ODTicketOption){
|
||||
const label = option.get("opendiscord:button-label").value.substring(0,100)
|
||||
const desc = option.get("opendiscord:description").value.substring(0,100)
|
||||
const emoji = option.get("opendiscord:button-emoji").value
|
||||
|
||||
return {
|
||||
label:(label.length > 0) ? label : "<no-label-provided>",
|
||||
value:"od:ticket-option|"+option.id.value,
|
||||
emoji:(emoji.length > 0) ? emoji : undefined,
|
||||
description:(desc.length > 0) ? desc : undefined,
|
||||
default:false
|
||||
}
|
||||
}else if (option instanceof api.ODRoleOption){
|
||||
const label = option.get("opendiscord:button-label").value.substring(0,100)
|
||||
const desc = option.get("opendiscord:description").value.substring(0,100)
|
||||
const emoji = option.get("opendiscord:button-emoji").value
|
||||
|
||||
return {
|
||||
label:(label.length > 0) ? label : "<no-label-provided>",
|
||||
value:"od:role-option|"+option.id.value,
|
||||
emoji:(emoji.length > 0) ? emoji : undefined,
|
||||
description:(desc.length > 0) ? desc : undefined,
|
||||
default:false
|
||||
}
|
||||
}else if (option instanceof api.ODSubPanelOption){
|
||||
const label = option.get("opendiscord:button-label").value.substring(0,100)
|
||||
const desc = option.get("opendiscord:description").value.substring(0,100)
|
||||
const emoji = option.get("opendiscord:button-emoji").value
|
||||
|
||||
return {
|
||||
label:(label.length > 0) ? label : "<no-label-provided>",
|
||||
value:"od:subpanel-option|"+option.id.value,
|
||||
emoji:(emoji.length > 0) ? emoji : undefined,
|
||||
description:(desc.length > 0) ? desc : undefined,
|
||||
default:false
|
||||
}
|
||||
}else throw new api.ODSystemError("Unable to create panel dropdown with options that don't match: ticket, role, sub-panel!")
|
||||
})
|
||||
|
||||
instance.setCustomId("od:panel-dropdown")
|
||||
|
||||
@@ -307,18 +307,27 @@ const panelMessages = () => {
|
||||
|
||||
if (panel.get("opendiscord:dropdown").value){
|
||||
//dropdown
|
||||
const ticketOptions: api.ODTicketOption[] = []
|
||||
const ticketOptions: (api.ODTicketOption|api.ODRoleOption|api.ODSubPanelOption)[] = []
|
||||
options.forEach((option) => {
|
||||
if (option instanceof api.ODTicketOption) ticketOptions.push(option)
|
||||
if (option instanceof api.ODRoleOption) ticketOptions.push(option)
|
||||
if (option instanceof api.ODSubPanelOption) ticketOptions.push(option)
|
||||
})
|
||||
instance.addComponent(await dropdowns.getSafe("opendiscord:panel-dropdown-tickets").build(origin,{guild,channel,user,panel,options:ticketOptions}))
|
||||
instance.addComponent(await dropdowns.getSafe("opendiscord:panel-dropdown").build(origin,{guild,channel,user,panel,options:ticketOptions}))
|
||||
}else{
|
||||
//buttons
|
||||
let rowButtonCount: number = 0
|
||||
for (const option of options){
|
||||
if (rowButtonCount >= panel.get("opendiscord:maximum-buttons-per-row").value){
|
||||
instance.addComponent({id:new api.ODId("opendiscord:new-row"),component:"\n"})
|
||||
rowButtonCount = 0
|
||||
}
|
||||
if (option instanceof api.ODTicketOption) instance.addComponent(await buttons.getSafe("opendiscord:ticket-option").build(origin,{guild,channel,user,panel,option}))
|
||||
else if (option instanceof api.ODWebsiteOption) instance.addComponent(await buttons.getSafe("opendiscord:website-option").build(origin,{guild,channel,user,panel,option}))
|
||||
else if (option instanceof api.ODRoleOption) instance.addComponent(await buttons.getSafe("opendiscord:role-option").build(origin,{guild,channel,user,panel,option}))
|
||||
else if (option instanceof api.ODSubPanelOption) instance.addComponent(await buttons.getSafe("opendiscord:subpanel-option").build(origin,{guild,channel,user,panel,option}))
|
||||
|
||||
rowButtonCount++
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user