diff --git a/app/http/endpoints/api/panel/paneldelete.go b/app/http/endpoints/api/panel/paneldelete.go index 773a13c6..6fd92bc6 100644 --- a/app/http/endpoints/api/panel/paneldelete.go +++ b/app/http/endpoints/api/panel/paneldelete.go @@ -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 diff --git a/app/http/endpoints/api/panel/panellist.go b/app/http/endpoints/api/panel/panellist.go index 5c4960b8..18988031 100644 --- a/app/http/endpoints/api/panel/panellist.go +++ b/app/http/endpoints/api/panel/panellist.go @@ -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" @@ -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 diff --git a/go.mod b/go.mod index 13ab0f93..c7b997ea 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/go.sum b/go.sum index 594c37ec..66ca3ddc 100644 --- a/go.sum +++ b/go.sum @@ -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=