Disable /open

This commit is contained in:
rxdn 2021-08-08 18:19:11 +01:00
parent d35ae1f243
commit 696d09ddb8
8 changed files with 77 additions and 14 deletions

View File

@ -56,7 +56,7 @@ func GetGuilds(ctx *gin.Context) {
fakeGuild := guild.Guild{ fakeGuild := guild.Guild{
Id: g.GuildId, Id: g.GuildId,
Owner: g.Owner, Owner: g.Owner,
Permissions: uint64(g.UserPermissions), Permissions: g.UserPermissions,
} }
if g.Owner { if g.Owner {

View File

@ -1,11 +1,17 @@
package api package api
import ( import (
"context"
"errors"
"github.com/TicketsBot/GoPanel/botcontext"
dbclient "github.com/TicketsBot/GoPanel/database" dbclient "github.com/TicketsBot/GoPanel/database"
"github.com/TicketsBot/GoPanel/rpc/cache" "github.com/TicketsBot/GoPanel/rpc/cache"
"github.com/TicketsBot/database" "github.com/TicketsBot/database"
"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/interaction"
"github.com/rxdn/gdl/rest"
"golang.org/x/sync/errgroup"
) )
func UpdateSettingsHandler(ctx *gin.Context) { func UpdateSettingsHandler(ctx *gin.Context) {
@ -15,7 +21,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
if err := ctx.BindJSON(&settings); err != nil { if err := ctx.BindJSON(&settings); err != nil {
ctx.AbortWithStatusJSON(400, gin.H{ ctx.AbortWithStatusJSON(400, gin.H{
"success": false, "success": false,
"error": err.Error(), "error": err.Error(),
}) })
return return
} }
@ -24,7 +30,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
channels := cache.Instance.GetGuildChannels(guildId) channels := cache.Instance.GetGuildChannels(guildId)
// TODO: Errors // TODO: Errors
settings.updateSettings(guildId) err := settings.updateSettings(guildId)
validPrefix := settings.updatePrefix(guildId) validPrefix := settings.updatePrefix(guildId)
validWelcomeMessage := settings.updateWelcomeMessage(guildId) validWelcomeMessage := settings.updateWelcomeMessage(guildId)
validTicketLimit := settings.updateTicketLimit(guildId) validTicketLimit := settings.updateTicketLimit(guildId)
@ -37,18 +43,68 @@ func UpdateSettingsHandler(ctx *gin.Context) {
settings.updateFeedbackEnabled(guildId) settings.updateFeedbackEnabled(guildId)
ctx.JSON(200, gin.H{ ctx.JSON(200, gin.H{
"prefix": validPrefix, "prefix": validPrefix,
"welcome_message": validWelcomeMessage, "welcome_message": validWelcomeMessage,
"ticket_limit": validTicketLimit, "ticket_limit": validTicketLimit,
"archive_channel": validArchiveChannel, "archive_channel": validArchiveChannel,
"category": validCategory, "category": validCategory,
"naming_scheme": validNamingScheme, "naming_scheme": validNamingScheme,
"error": err,
}) })
} }
// TODO: Return error func (s *Settings) updateSettings(guildId uint64) error {
func (s *Settings) updateSettings(guildId uint64) { group, _ := errgroup.WithContext(context.Background())
go dbclient.Client.Settings.Set(guildId, s.Settings)
group.Go(func() error {
return dbclient.Client.Settings.Set(guildId, s.Settings)
})
group.Go(func() error {
return setOpenCommandPermissions(guildId, s.DisableOpenCommand)
})
return group.Wait()
}
func setOpenCommandPermissions(guildId uint64, disabled bool) error {
ctx, err := botcontext.ContextForGuild(guildId)
if err != nil {
return err
}
commands, err := rest.GetGlobalCommands(ctx.Token, ctx.RateLimiter, ctx.BotId)
if err != nil {
return err
}
var commandId uint64
for _, cmd := range commands {
if cmd.Name == "open" {
commandId = cmd.Id
break
}
}
if commandId == 0 {
return errors.New("open command not found")
}
data := rest.CommandWithPermissionsData{
Id: commandId,
ApplicationId: ctx.BotId,
GuildId: guildId,
Permissions: []interaction.ApplicationCommandPermissions{
{
Id: guildId,
Type: interaction.ApplicationCommandPermissionTypeRole,
Permission: !disabled,
},
},
}
_, err = rest.EditCommandPermissions(ctx.Token, ctx.RateLimiter, ctx.BotId, guildId, commandId, data)
return err
} }
func (s *Settings) updatePrefix(guildId uint64) bool { func (s *Settings) updatePrefix(guildId uint64) bool {
@ -113,6 +169,7 @@ func (s *Settings) updateArchiveChannel(channels []channel.Channel, guildId uint
} }
var validScheme = []database.NamingScheme{database.Id, database.Username} var validScheme = []database.NamingScheme{database.Id, database.Username}
func (s *Settings) updateNamingScheme(guildId uint64) bool { func (s *Settings) updateNamingScheme(guildId uint64) bool {
var valid bool var valid bool
for _, scheme := range validScheme { for _, scheme := range validScheme {
@ -142,7 +199,6 @@ func (s *Settings) updateCloseConfirmation(guildId uint64) {
go dbclient.Client.CloseConfirmation.Set(guildId, s.CloseConfirmation) go dbclient.Client.CloseConfirmation.Set(guildId, s.CloseConfirmation)
} }
func (s *Settings) updateFeedbackEnabled(guildId uint64) { func (s *Settings) updateFeedbackEnabled(guildId uint64) {
go dbclient.Client.FeedbackEnabled.Set(guildId, s.FeedbackEnabled) go dbclient.Client.FeedbackEnabled.Set(guildId, s.FeedbackEnabled)
} }

View File

@ -16,6 +16,7 @@ import (
) )
type BotContext struct { type BotContext struct {
BotId uint64
Token string Token string
RateLimiter *ratelimit.Ratelimiter RateLimiter *ratelimit.Ratelimiter
} }
@ -113,7 +114,6 @@ func (ctx BotContext) SearchMembers(guildId uint64, query string) (members []mem
return return
} }
func (ctx BotContext) ListMembers(guildId uint64) (members []member.Member, err error) { func (ctx BotContext) ListMembers(guildId uint64) (members []member.Member, err error) {
data := rest.ListGuildMembersData{ data := rest.ListGuildMembersData{
Limit: 100, Limit: 100,

View File

@ -22,9 +22,11 @@ func ContextForGuild(guildId uint64) (ctx BotContext, err error) {
return ctx, err return ctx, err
} }
ctx.BotId = res.BotId
ctx.Token = res.Token ctx.Token = res.Token
keyPrefix = fmt.Sprintf("ratelimiter:%d", whitelabelBotId) keyPrefix = fmt.Sprintf("ratelimiter:%d", whitelabelBotId)
} else { } else {
ctx.BotId = config.Conf.Bot.Id
ctx.Token = config.Conf.Bot.Token ctx.Token = config.Conf.Bot.Token
keyPrefix = "ratelimiter:public" keyPrefix = "ratelimiter:public"
} }

View File

@ -53,6 +53,7 @@ type (
} }
Bot struct { Bot struct {
Id uint64
Token string Token string
PremiumLookupProxyUrl string `toml:"premium-lookup-proxy-url"` PremiumLookupProxyUrl string `toml:"premium-lookup-proxy-url"`
PremiumLookupProxyKey string `toml:"premium-lookup-proxy-key"` PremiumLookupProxyKey string `toml:"premium-lookup-proxy-key"`
@ -119,6 +120,7 @@ func fromEnvvar() {
rateLimitMax, _ := strconv.Atoi(os.Getenv("RATELIMIT_MAX")) rateLimitMax, _ := strconv.Atoi(os.Getenv("RATELIMIT_MAX"))
sessionThreads, _ := strconv.Atoi(os.Getenv("SESSION_DB_THREADS")) sessionThreads, _ := strconv.Atoi(os.Getenv("SESSION_DB_THREADS"))
oauthId, _ := strconv.ParseUint(os.Getenv("OAUTH_ID"), 10, 64) oauthId, _ := strconv.ParseUint(os.Getenv("OAUTH_ID"), 10, 64)
botId, _ := strconv.ParseUint(os.Getenv("BOT_ID"), 10, 64)
redisPort, _ := strconv.Atoi(os.Getenv("REDIS_PORT")) redisPort, _ := strconv.Atoi(os.Getenv("REDIS_PORT"))
redisThreads, _ := strconv.Atoi(os.Getenv("REDIS_THREADS")) redisThreads, _ := strconv.Atoi(os.Getenv("REDIS_THREADS"))
@ -140,7 +142,7 @@ func fromEnvvar() {
}, },
Secret: os.Getenv("JWT_SECRET"), Secret: os.Getenv("JWT_SECRET"),
TrustedProxies: strings.Split(os.Getenv("TRUSTED_PROXIES"), ","), TrustedProxies: strings.Split(os.Getenv("TRUSTED_PROXIES"), ","),
RealIpHeaders: strings.Split(os.Getenv("REAL_IP_HEADERS"), ","), RealIpHeaders: strings.Split(os.Getenv("REAL_IP_HEADERS"), ","),
}, },
Oauth: Oauth{ Oauth: Oauth{
Id: oauthId, Id: oauthId,
@ -151,6 +153,7 @@ func fromEnvvar() {
Uri: os.Getenv("DATABASE_URI"), Uri: os.Getenv("DATABASE_URI"),
}, },
Bot: Bot{ Bot: Bot{
Id: botId,
Token: os.Getenv("BOT_TOKEN"), Token: os.Getenv("BOT_TOKEN"),
PremiumLookupProxyUrl: os.Getenv("PREMIUM_PROXY_URL"), PremiumLookupProxyUrl: os.Getenv("PREMIUM_PROXY_URL"),
PremiumLookupProxyKey: os.Getenv("PREMIUM_PROXY_KEY"), PremiumLookupProxyKey: os.Getenv("PREMIUM_PROXY_KEY"),

View File

@ -33,3 +33,4 @@
- REDIS_THREADS - REDIS_THREADS
- CACHE_URI - CACHE_URI
- TRUSTED_PROXIES - TRUSTED_PROXIES
- BOT_ID

View File

@ -23,6 +23,7 @@
<NamingScheme col4=true bind:value={data.naming_scheme}/> <NamingScheme col4=true bind:value={data.naming_scheme}/>
<Checkbox label="Enable User Feedback" col4=true bind:value={data.feedback_enabled}/> <Checkbox label="Enable User Feedback" col4=true bind:value={data.feedback_enabled}/>
<Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/> <Checkbox label="Hide Claim Button" col4=true bind:value={data.hide_claim_button}/>
<Checkbox label="Disable /open Command" col4=true bind:value={data.disable_open_command}/>
</div> </div>
<div class="row"> <div class="row">
<div class="col-1"> <div class="col-1">

2
go.mod
View File

@ -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-20210727134627-35eb7ed03a44 github.com/TicketsBot/common v0.0.0-20210727134627-35eb7ed03a44
github.com/TicketsBot/database v0.0.0-20210801121328-1e2e1c5e3346 github.com/TicketsBot/database v0.0.0-20210808170243-bcb4f117ed18
github.com/TicketsBot/worker v0.0.0-20210727130432-3df3cd1246a3 github.com/TicketsBot/worker v0.0.0-20210727130432-3df3cd1246a3
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