From a36fd7582f3ad0f02a26d6cc5ca038331d1c1315 Mon Sep 17 00:00:00 2001 From: biast12 Date: Wed, 15 Apr 2026 20:55:21 +0200 Subject: [PATCH 1/3] Handle panel enable/disable on tier changes When listing panels, detect any force-disabled panels and, if the guild now has a premium tier, re-enable them by calling Panel.EnableAll and clearing the ForceDisabled flag in-memory. This requires loading the bot context and checking the guild's premium tier via the RPC premium client. Also, after deleting a panel, re-enforce the free-tier panel limit by calling Panel.ForceDisableSome for non-premium guilds. Additionally, enable a local replace in go.mod for the database module (uncommented). Error conditions are propagated as internal server errors to the caller. --- app/http/endpoints/api/panel/paneldelete.go | 8 +++++ app/http/endpoints/api/panel/panellist.go | 37 +++++++++++++++++++++ go.mod | 2 +- 3 files changed, 46 insertions(+), 1 deletion(-) 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 eadcf472..6bb8c17d 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/TicketsBot-cloud/dashboard go 1.25.0 -//replace github.com/TicketsBot-cloud/database => ../database +replace github.com/TicketsBot-cloud/database => ../database //replace github.com/TicketsBot-cloud/gdl => ../gdl From 5494cfd898ef8a10e86e64f3b0c8a8b7b7ca3500 Mon Sep 17 00:00:00 2001 From: biast12 Date: Sun, 26 Apr 2026 12:46:09 +0200 Subject: [PATCH 2/3] Bump database --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index bee532cf..3d5ad3bf 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/TicketsBot-cloud/dashboard go 1.25.0 -replace github.com/TicketsBot-cloud/database => ../database +//replace github.com/TicketsBot-cloud/database => ../database //replace github.com/TicketsBot-cloud/gdl => ../gdl @@ -18,7 +18,7 @@ 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/database v0.0.0-20260426100030-8e5afd0b1b76 github.com/TicketsBot-cloud/gdl v0.0.0-20260306134952-cccb0116fef6 github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc github.com/TicketsBot-cloud/worker v0.0.0-20260423165809-3a23e8fb9fc3 diff --git a/go.sum b/go.sum index 0ffe234e..0bbc0c1e 100644 --- a/go.sum +++ b/go.sum @@ -47,8 +47,8 @@ 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/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-20260306134952-cccb0116fef6 h1:ucG0xLPt7xixW7/LvL0hXDBDouDRS1Nf+77qP8iJ/X0= github.com/TicketsBot-cloud/gdl v0.0.0-20260306134952-cccb0116fef6/go.mod h1:CdwBR2egPtxUXjD2CgC9ZwfuB8dz9HPePM8nuG6dt7Y= github.com/TicketsBot-cloud/logarchiver v0.0.0-20251018211319-7a7df5cacbdc h1:qTLNpCvIqM7UwZ6MdWQ9EztcDsIJfHh+VJdG+ULLEaA= From dbdf9e691045471184aa41c34dc712da5e0b98e9 Mon Sep 17 00:00:00 2001 From: biast12 <53872542+biast12@users.noreply.github.com> Date: Sun, 21 Jun 2026 21:43:22 +0200 Subject: [PATCH 3/3] bump gdl and database --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) 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=