Multipanel buttons
This commit is contained in:
parent
ffe7dbb1f9
commit
10852a01e2
@ -13,7 +13,8 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/rxdn/gdl/objects/channel"
|
"github.com/rxdn/gdl/objects/channel"
|
||||||
"github.com/rxdn/gdl/objects/channel/embed"
|
"github.com/rxdn/gdl/objects/channel/embed"
|
||||||
"github.com/rxdn/gdl/objects/channel/message"
|
"github.com/rxdn/gdl/objects/guild/emoji"
|
||||||
|
"github.com/rxdn/gdl/objects/interaction/component"
|
||||||
"github.com/rxdn/gdl/rest"
|
"github.com/rxdn/gdl/rest"
|
||||||
"github.com/rxdn/gdl/rest/request"
|
"github.com/rxdn/gdl/rest/request"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
@ -56,7 +57,7 @@ func MultiPanelCreate(ctx *gin.Context) {
|
|||||||
// get premium status
|
// get premium status
|
||||||
premiumTier := rpc.PremiumClient.GetTierByGuildId(guildId, true, botContext.Token, botContext.RateLimiter)
|
premiumTier := rpc.PremiumClient.GetTierByGuildId(guildId, true, botContext.Token, botContext.RateLimiter)
|
||||||
|
|
||||||
messageId, err := data.sendEmbed(&botContext, premiumTier > premium.None)
|
messageId, err := data.sendEmbed(&botContext, premiumTier > premium.None, panels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var unwrapped request.RestError
|
var unwrapped request.RestError
|
||||||
if errors.As(err, &unwrapped); unwrapped.StatusCode == 403 {
|
if errors.As(err, &unwrapped); unwrapped.StatusCode == 403 {
|
||||||
@ -68,17 +69,6 @@ func MultiPanelCreate(ctx *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := data.addReactions(&botContext, data.ChannelId, messageId, panels); err != nil {
|
|
||||||
var unwrapped request.RestError
|
|
||||||
if errors.As(err, &unwrapped); unwrapped.StatusCode == 403 {
|
|
||||||
ctx.JSON(500, utils.ErrorJson(errors.New("I do not have permission to add reactions in the provided channel")))
|
|
||||||
} else {
|
|
||||||
ctx.JSON(500, utils.ErrorJson(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
multiPanel := database.MultiPanel{
|
multiPanel := database.MultiPanel{
|
||||||
MessageId: messageId,
|
MessageId: messageId,
|
||||||
ChannelId: data.ChannelId,
|
ChannelId: data.ChannelId,
|
||||||
@ -184,13 +174,6 @@ func (d *multiPanelCreateData) validatePanels(guildId uint64) (panels []database
|
|||||||
// find panel struct
|
// find panel struct
|
||||||
for _, panel := range existingPanels {
|
for _, panel := range existingPanels {
|
||||||
if panel.PanelId == panelId {
|
if panel.PanelId == panelId {
|
||||||
// check there isn't a panel with the same reaction emote
|
|
||||||
for _, previous := range panels {
|
|
||||||
if previous.ReactionEmote == panel.ReactionEmote {
|
|
||||||
return nil, errors.New("2 sub-panels cannot have the same reaction emotes")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
valid = true
|
valid = true
|
||||||
panels = append(panels, panel)
|
panels = append(panels, panel)
|
||||||
}
|
}
|
||||||
@ -204,7 +187,7 @@ func (d *multiPanelCreateData) validatePanels(guildId uint64) (panels []database
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *multiPanelCreateData) sendEmbed(ctx *botcontext.BotContext, isPremium bool) (messageId uint64, err error) {
|
func (d *multiPanelCreateData) sendEmbed(ctx *botcontext.BotContext, isPremium bool, panels []database.Panel) (uint64, error) {
|
||||||
e := embed.NewEmbed().
|
e := embed.NewEmbed().
|
||||||
SetTitle(d.Title).
|
SetTitle(d.Title).
|
||||||
SetDescription(d.Content).
|
SetDescription(d.Content).
|
||||||
@ -215,22 +198,29 @@ func (d *multiPanelCreateData) sendEmbed(ctx *botcontext.BotContext, isPremium b
|
|||||||
e.SetFooter("Powered by ticketsbot.net", "https://cdn.discordapp.com/avatars/508391840525975553/ac2647ffd4025009e2aa852f719a8027.png?size=256")
|
e.SetFooter("Powered by ticketsbot.net", "https://cdn.discordapp.com/avatars/508391840525975553/ac2647ffd4025009e2aa852f719a8027.png?size=256")
|
||||||
}
|
}
|
||||||
|
|
||||||
var msg message.Message
|
buttons := make([]component.Component, len(panels))
|
||||||
msg, err = rest.CreateMessage(ctx.Token, ctx.RateLimiter, d.ChannelId, rest.CreateMessageData{Embed: e})
|
for i, panel := range panels {
|
||||||
|
buttons[i] = component.BuildButton(component.Button{
|
||||||
|
Label: panel.Title,
|
||||||
|
CustomId: panel.CustomId,
|
||||||
|
Style: component.ButtonStylePrimary,
|
||||||
|
Emoji: emoji.Emoji{
|
||||||
|
Name: panel.ReactionEmote,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
data := rest.CreateMessageData{
|
||||||
|
Embed: e,
|
||||||
|
Components: []component.Component{
|
||||||
|
component.BuildActionRow(buttons...),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := rest.CreateMessage(ctx.Token, ctx.RateLimiter, d.ChannelId, data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
messageId = msg.Id
|
return msg.Id, nil
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *multiPanelCreateData) addReactions(ctx *botcontext.BotContext, channelId, messageId uint64, panels []database.Panel) (err error) {
|
|
||||||
for _, panel := range panels {
|
|
||||||
if err = rest.CreateReaction(ctx.Token, ctx.RateLimiter, channelId, messageId, panel.ReactionEmote); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ func MultiPanelUpdate(ctx *gin.Context) {
|
|||||||
premiumTier := rpc.PremiumClient.GetTierByGuildId(guildId, true, botContext.Token, botContext.RateLimiter)
|
premiumTier := rpc.PremiumClient.GetTierByGuildId(guildId, true, botContext.Token, botContext.RateLimiter)
|
||||||
|
|
||||||
// send new message
|
// send new message
|
||||||
messageId, err := data.sendEmbed(&botContext, premiumTier > premium.None)
|
messageId, err := data.sendEmbed(&botContext, premiumTier > premium.None, panels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var unwrapped request.RestError
|
var unwrapped request.RestError
|
||||||
if errors.As(err, &unwrapped) && unwrapped.StatusCode == 403 {
|
if errors.As(err, &unwrapped) && unwrapped.StatusCode == 403 {
|
||||||
@ -89,18 +89,6 @@ func MultiPanelUpdate(ctx *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// add reactions to new message
|
|
||||||
if err := data.addReactions(&botContext, data.ChannelId, messageId, panels); err != nil {
|
|
||||||
var unwrapped request.RestError
|
|
||||||
if errors.As(err, &unwrapped) && unwrapped.StatusCode == 403 {
|
|
||||||
ctx.JSON(500, utils.ErrorJson(errors.New("I do not have permission to add reactions in the provided channel")))
|
|
||||||
} else {
|
|
||||||
ctx.JSON(500, utils.ErrorJson(err))
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// update DB
|
// update DB
|
||||||
updated := database.MultiPanel{
|
updated := database.MultiPanel{
|
||||||
Id: multiPanel.Id,
|
Id: multiPanel.Id,
|
||||||
|
4
go.mod
4
go.mod
@ -6,7 +6,7 @@ require (
|
|||||||
github.com/BurntSushi/toml v0.3.1
|
github.com/BurntSushi/toml v0.3.1
|
||||||
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
|
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
|
||||||
github.com/TicketsBot/common v0.0.0-20210527174309-f7344004ae32
|
github.com/TicketsBot/common v0.0.0-20210527174309-f7344004ae32
|
||||||
github.com/TicketsBot/database v0.0.0-20210528144640-ac827439e059
|
github.com/TicketsBot/database v0.0.0-20210528165404-2addee803304
|
||||||
github.com/TicketsBot/worker v0.0.0-20210528135955-34744f610804
|
github.com/TicketsBot/worker v0.0.0-20210528135955-34744f610804
|
||||||
github.com/apex/log v1.1.2
|
github.com/apex/log v1.1.2
|
||||||
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
|
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect
|
||||||
@ -21,7 +21,7 @@ require (
|
|||||||
github.com/jackc/pgx/v4 v4.7.1
|
github.com/jackc/pgx/v4 v4.7.1
|
||||||
github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c
|
github.com/pasztorpisti/qs v0.0.0-20171216220353-8d6c33ee906c
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/rxdn/gdl v0.0.0-20210527190730-a6b87abf7fc8
|
github.com/rxdn/gdl v0.0.0-20210528152706-5da182da93db
|
||||||
github.com/sirupsen/logrus v1.5.0
|
github.com/sirupsen/logrus v1.5.0
|
||||||
github.com/ulule/limiter/v3 v3.5.0
|
github.com/ulule/limiter/v3 v3.5.0
|
||||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
|
||||||
|
@ -112,7 +112,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#multi-edit-panels').selectpicker('val', panel.panels.map(p => p.message_id));
|
$('#multi-edit-panels').selectpicker('val', panel.panels.map(p => p.panel_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateMultiPanel() {
|
async function updateMultiPanel() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user