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{
Id: g.GuildId,
Owner: g.Owner,
Permissions: uint64(g.UserPermissions),
Permissions: g.UserPermissions,
}
if g.Owner {

View File

@ -1,11 +1,17 @@
package api
import (
"context"
"errors"
"github.com/TicketsBot/GoPanel/botcontext"
dbclient "github.com/TicketsBot/GoPanel/database"
"github.com/TicketsBot/GoPanel/rpc/cache"
"github.com/TicketsBot/database"
"github.com/gin-gonic/gin"
"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) {
@ -15,7 +21,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
if err := ctx.BindJSON(&settings); err != nil {
ctx.AbortWithStatusJSON(400, gin.H{
"success": false,
"error": err.Error(),
"error": err.Error(),
})
return
}
@ -24,7 +30,7 @@ func UpdateSettingsHandler(ctx *gin.Context) {
channels := cache.Instance.GetGuildChannels(guildId)
// TODO: Errors
settings.updateSettings(guildId)
err := settings.updateSettings(guildId)
validPrefix := settings.updatePrefix(guildId)
validWelcomeMessage := settings.updateWelcomeMessage(guildId)
validTicketLimit := settings.updateTicketLimit(guildId)
@ -37,18 +43,68 @@ func UpdateSettingsHandler(ctx *gin.Context) {
settings.updateFeedbackEnabled(guildId)
ctx.JSON(200, gin.H{
"prefix": validPrefix,
"prefix": validPrefix,
"welcome_message": validWelcomeMessage,
"ticket_limit": validTicketLimit,
"ticket_limit": validTicketLimit,
"archive_channel": validArchiveChannel,
"category": validCategory,
"naming_scheme": validNamingScheme,
"category": validCategory,
"naming_scheme": validNamingScheme,
"error": err,
})
}
// TODO: Return error
func (s *Settings) updateSettings(guildId uint64) {
go dbclient.Client.Settings.Set(guildId, s.Settings)
func (s *Settings) updateSettings(guildId uint64) error {
group, _ := errgroup.WithContext(context.Background())
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 {
@ -113,6 +169,7 @@ func (s *Settings) updateArchiveChannel(channels []channel.Channel, guildId uint
}
var validScheme = []database.NamingScheme{database.Id, database.Username}
func (s *Settings) updateNamingScheme(guildId uint64) bool {
var valid bool
for _, scheme := range validScheme {
@ -142,7 +199,6 @@ func (s *Settings) updateCloseConfirmation(guildId uint64) {
go dbclient.Client.CloseConfirmation.Set(guildId, s.CloseConfirmation)
}
func (s *Settings) updateFeedbackEnabled(guildId uint64) {
go dbclient.Client.FeedbackEnabled.Set(guildId, s.FeedbackEnabled)
}

View File

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

View File

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

View File

@ -53,6 +53,7 @@ type (
}
Bot struct {
Id uint64
Token string
PremiumLookupProxyUrl string `toml:"premium-lookup-proxy-url"`
PremiumLookupProxyKey string `toml:"premium-lookup-proxy-key"`
@ -119,6 +120,7 @@ func fromEnvvar() {
rateLimitMax, _ := strconv.Atoi(os.Getenv("RATELIMIT_MAX"))
sessionThreads, _ := strconv.Atoi(os.Getenv("SESSION_DB_THREADS"))
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"))
redisThreads, _ := strconv.Atoi(os.Getenv("REDIS_THREADS"))
@ -140,7 +142,7 @@ func fromEnvvar() {
},
Secret: os.Getenv("JWT_SECRET"),
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{
Id: oauthId,
@ -151,6 +153,7 @@ func fromEnvvar() {
Uri: os.Getenv("DATABASE_URI"),
},
Bot: Bot{
Id: botId,
Token: os.Getenv("BOT_TOKEN"),
PremiumLookupProxyUrl: os.Getenv("PREMIUM_PROXY_URL"),
PremiumLookupProxyKey: os.Getenv("PREMIUM_PROXY_KEY"),

View File

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

View File

@ -23,6 +23,7 @@
<NamingScheme col4=true bind:value={data.naming_scheme}/>
<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="Disable /open Command" col4=true bind:value={data.disable_open_command}/>
</div>
<div class="row">
<div class="col-1">

2
go.mod
View File

@ -6,7 +6,7 @@ require (
github.com/BurntSushi/toml v0.3.1
github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb
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/apex/log v1.1.2
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect