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:
DJj123dj
2026-05-23 16:45:01 +02:00
parent c64220cad4
commit 6c41aecfa7
12 changed files with 289 additions and 117 deletions
+40 -14
View File
@@ -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")
+11 -2
View File
@@ -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++
}
}
})