Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/http/endpoints/api/panel/paneldelete.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,14 @@ func DeletePanel(c *gin.Context) {
return
}

// Re-enforce the free tier panel limit after deletion.
if premiumTier == premium.None {
if err := database.Client.Panel.ForceDisableSome(c, guildId, freePanelLimit); err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, app.NewError(err, "Failed to delete panel"))
return
}
}

// Update all multi panels messages to remove the button
for i, multiPanel := range multiPanels {
// Only update 5 multi-panels maximum: Prevent DoS
Expand Down
37 changes: 37 additions & 0 deletions app/http/endpoints/api/panel/panellist.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ import (
"net/http"
"strconv"

"github.com/TicketsBot-cloud/common/premium"
"github.com/TicketsBot-cloud/dashboard/app"
"github.com/TicketsBot-cloud/dashboard/botcontext"
dbclient "github.com/TicketsBot-cloud/dashboard/database"
"github.com/TicketsBot-cloud/dashboard/rpc"
"github.com/TicketsBot-cloud/dashboard/utils/types"
"github.com/TicketsBot-cloud/database"
"github.com/gin-gonic/gin"
Expand Down Expand Up @@ -48,6 +51,40 @@ func ListPanels(c *gin.Context) {
return
}

// If any panels are force-disabled and the server has premium, re-enable them all.
hasForceDisabled := false
for _, p := range panels {
if p.ForceDisabled {
hasForceDisabled = true
break
}
}

if hasForceDisabled {
botContext, err := botcontext.ContextForGuild(guildId)
if err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, app.NewError(err, "Failed to load panels"))
return
}

premiumTier, err := rpc.PremiumClient.GetTierByGuildId(c, guildId, true, botContext.Token, botContext.RateLimiter)
if err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, app.NewError(err, "Failed to load panels"))
return
}

if premiumTier > premium.None {
if err := dbclient.Client.Panel.EnableAll(c, guildId); err != nil {
_ = c.AbortWithError(http.StatusInternalServerError, app.NewError(err, "Failed to load panels"))
return
}

for i := range panels {
panels[i].ForceDisabled = false
}
}
}

wrapped := make([]panelResponse, len(panels))

// we will need to lookup role mentions
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ require (
github.com/BurntSushi/toml v1.2.1
github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704
github.com/TicketsBot-cloud/common v0.0.0-20260412182419-83b9a6ea08e7
github.com/TicketsBot-cloud/database v0.0.0-20260423165031-495c2e8a5bc7
github.com/TicketsBot-cloud/gdl v0.0.0-20260426095953-999472e6e538
github.com/TicketsBot-cloud/database v0.0.0-20260426100030-8e5afd0b1b76
github.com/TicketsBot-cloud/gdl v0.0.0-20260612070331-a3947b410d3e
github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc
github.com/TicketsBot-cloud/worker v0.0.0-20260423165809-3a23e8fb9fc3
github.com/apex/log v1.1.2
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704 h1
github.com/TicketsBot-cloud/archiverclient v0.0.0-20251015181023-f0b66a074704/go.mod h1:Mux1bEPpOHwRw1wo6Fa6qJLJH9Erk9qv1yAIfLi1Wmw=
github.com/TicketsBot-cloud/common v0.0.0-20260412182419-83b9a6ea08e7 h1:dFmPLk9KXGRVSfiuKK6kusVhRKG7nGfiGld+WRuiX7w=
github.com/TicketsBot-cloud/common v0.0.0-20260412182419-83b9a6ea08e7/go.mod h1:jXGcmAuRvv92YqITskvClgoCpFVqYw14CKJdYhiLtVU=
github.com/TicketsBot-cloud/database v0.0.0-20260423165031-495c2e8a5bc7 h1:35PmSSlrSN+DOLNEnkRw4vSg1qxnnlEKtMlOaOUjMOQ=
github.com/TicketsBot-cloud/database v0.0.0-20260423165031-495c2e8a5bc7/go.mod h1:HQXAgmNSm7/FmBYwcsa6qpZqMrDhbLoEl+AyqFQ+RwY=
github.com/TicketsBot-cloud/gdl v0.0.0-20260426095953-999472e6e538 h1:ewKw1Wv1x/yi8h1IH7EofcYnPUxWZaVTIPFkT97nhn0=
github.com/TicketsBot-cloud/gdl v0.0.0-20260426095953-999472e6e538/go.mod h1:CdwBR2egPtxUXjD2CgC9ZwfuB8dz9HPePM8nuG6dt7Y=
github.com/TicketsBot-cloud/database v0.0.0-20260426100030-8e5afd0b1b76 h1:7Pnp52NN0GAsRVrxCtHDQaB5ns+DAnizgtOCOKbD1PM=
github.com/TicketsBot-cloud/database v0.0.0-20260426100030-8e5afd0b1b76/go.mod h1:HQXAgmNSm7/FmBYwcsa6qpZqMrDhbLoEl+AyqFQ+RwY=
github.com/TicketsBot-cloud/gdl v0.0.0-20260612070331-a3947b410d3e h1:qCibZQmO2rrBFrvn6+oAchPEQ7k/0Izr3ruL5P9aVZU=
github.com/TicketsBot-cloud/gdl v0.0.0-20260612070331-a3947b410d3e/go.mod h1:CdwBR2egPtxUXjD2CgC9ZwfuB8dz9HPePM8nuG6dt7Y=
github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc h1:qTLNpCvIqM7UwZ6MdWQ9EztcDsIJfHh+VJdG+ULLEaA=
github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc/go.mod h1:pZqkzPNNTqnwKZvCT8kCaTHxrG7HJbxZV83S0p7mmzM=
github.com/TicketsBot-cloud/worker v0.0.0-20260423165809-3a23e8fb9fc3 h1:9jqkh8wlH+1RVwDD4SHD2q9JddjzBeaAV1rdCrdxZe0=
Expand Down
Loading