57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/TicketsBot/GoPanel/database"
|
|
"github.com/TicketsBot/GoPanel/rpc/cache"
|
|
"github.com/gin-gonic/gin"
|
|
"golang.org/x/sync/errgroup"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
type userData struct {
|
|
Username string `json:"username"`
|
|
Discriminator string `json:"discriminator"`
|
|
}
|
|
|
|
func GetBlacklistHandler(ctx *gin.Context) {
|
|
guildId := ctx.Keys["guildid"].(uint64)
|
|
|
|
blacklistedUsers, err := database.Client.Blacklist.GetBlacklistedUsers(guildId)
|
|
if err != nil {
|
|
ctx.JSON(500, gin.H{
|
|
"success": false,
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
data := make(map[string]userData)
|
|
var lock sync.Mutex
|
|
|
|
group, _ := errgroup.WithContext(context.Background())
|
|
for _, userId := range blacklistedUsers {
|
|
group.Go(func() error {
|
|
user, _ := cache.Instance.GetUser(userId)
|
|
|
|
lock.Lock()
|
|
|
|
// JS cant do big ints
|
|
data[strconv.FormatUint(userId, 10)] = userData{
|
|
Username: user.Username,
|
|
Discriminator: fmt.Sprintf("%04d", user.Discriminator),
|
|
}
|
|
|
|
lock.Unlock()
|
|
|
|
return nil
|
|
})
|
|
}
|
|
|
|
_ = group.Wait()
|
|
|
|
ctx.JSON(200, data)
|
|
}
|