fix panic
This commit is contained in:
parent
2d501fed3e
commit
61c0fdd8df
@ -1,6 +1,8 @@
|
|||||||
package table
|
package table
|
||||||
|
|
||||||
import "github.com/TicketsBot/TicketsGo/database"
|
import (
|
||||||
|
"github.com/TicketsBot/GoPanel/database"
|
||||||
|
)
|
||||||
|
|
||||||
type CachedRole struct {
|
type CachedRole struct {
|
||||||
AssociationId int `gorm:"column:ASSOCIATIONID;primary_key;auto_increment"`
|
AssociationId int `gorm:"column:ASSOCIATIONID;primary_key;auto_increment"`
|
||||||
@ -14,7 +16,7 @@ func (CachedRole) TableName() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func DeleteRoles(guildId, userId int64) {
|
func DeleteRoles(guildId, userId int64) {
|
||||||
database.Db.Where(CachedRole{
|
database.Database.Where(CachedRole{
|
||||||
GuildId: guildId,
|
GuildId: guildId,
|
||||||
UserId: userId,
|
UserId: userId,
|
||||||
}).Delete(CachedRole{})
|
}).Delete(CachedRole{})
|
||||||
@ -22,7 +24,7 @@ func DeleteRoles(guildId, userId int64) {
|
|||||||
|
|
||||||
// TODO: Cache invalidation
|
// TODO: Cache invalidation
|
||||||
func CacheRole(guildId, userId, roleId int64) {
|
func CacheRole(guildId, userId, roleId int64) {
|
||||||
database.Db.Create(&CachedRole{
|
database.Database.Create(&CachedRole{
|
||||||
GuildId: guildId,
|
GuildId: guildId,
|
||||||
UserId: userId,
|
UserId: userId,
|
||||||
RoleId: roleId,
|
RoleId: roleId,
|
||||||
@ -31,7 +33,7 @@ func CacheRole(guildId, userId, roleId int64) {
|
|||||||
|
|
||||||
func GetCachedRoles(guildId, userId int64, res chan []int64) {
|
func GetCachedRoles(guildId, userId int64, res chan []int64) {
|
||||||
var rows []CachedRole
|
var rows []CachedRole
|
||||||
database.Db.Where(&CachedRole{
|
database.Database.Where(&CachedRole{
|
||||||
GuildId: guildId,
|
GuildId: guildId,
|
||||||
UserId: userId,
|
UserId: userId,
|
||||||
}).Find(&rows)
|
}).Find(&rows)
|
||||||
@ -40,5 +42,6 @@ func GetCachedRoles(guildId, userId int64, res chan []int64) {
|
|||||||
for _, row := range rows {
|
for _, row := range rows {
|
||||||
roles = append(roles, row.RoleId)
|
roles = append(roles, row.RoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
res <- roles
|
res <- roles
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package objects
|
package objects
|
||||||
|
|
||||||
|
import "github.com/TicketsBot/GoPanel/utils/types"
|
||||||
|
|
||||||
type Member struct {
|
type Member struct {
|
||||||
User User
|
User User
|
||||||
Nick string
|
Nick string
|
||||||
Roles []int64 `json:"roles,string"`
|
Roles types.Int64StringSlice `json:"roles,string"`
|
||||||
JoinedAt string
|
JoinedAt string
|
||||||
Deaf bool
|
Deaf bool
|
||||||
Mute bool
|
Mute bool
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/TicketsBot/GoPanel/database/table"
|
"github.com/TicketsBot/GoPanel/database/table"
|
||||||
"github.com/TicketsBot/GoPanel/utils/discord/endpoints/guild"
|
"github.com/TicketsBot/GoPanel/utils/discord/endpoints/guild"
|
||||||
"github.com/TicketsBot/GoPanel/utils/discord/objects"
|
"github.com/TicketsBot/GoPanel/utils/discord/objects"
|
||||||
|
"github.com/apex/log"
|
||||||
"github.com/gin-gonic/contrib/sessions"
|
"github.com/gin-gonic/contrib/sessions"
|
||||||
"github.com/robfig/go-cache"
|
"github.com/robfig/go-cache"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -60,8 +61,10 @@ func GetRolesRest(store sessions.Session, guildId, userId int64) *[]int64 {
|
|||||||
endpoint := guild.GetGuildMember(int(guildId), int(userId))
|
endpoint := guild.GetGuildMember(int(guildId), int(userId))
|
||||||
|
|
||||||
if err, _ := endpoint.Request(store, nil, nil, &member); err != nil {
|
if err, _ := endpoint.Request(store, nil, nil, &member); err != nil {
|
||||||
|
log.Error(err.Error())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return &member.Roles
|
roles := []int64(member.Roles)
|
||||||
|
return &roles
|
||||||
}
|
}
|
||||||
|
44
utils/types/int64stringslice.go
Normal file
44
utils/types/int64stringslice.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Int64StringSlice []int64
|
||||||
|
|
||||||
|
func (slice Int64StringSlice) MarshalJSON() ([]byte, error) {
|
||||||
|
values := make([]string, len(slice))
|
||||||
|
for i, value := range []int64(slice) {
|
||||||
|
values[i] = fmt.Sprintf(`"%v"`, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return []byte(fmt.Sprintf("[%v]", strings.Join(values, ","))), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (slice *Int64StringSlice) UnmarshalJSON(b []byte) error {
|
||||||
|
// Try array of strings first.
|
||||||
|
var values []string
|
||||||
|
err := json.Unmarshal(b, &values)
|
||||||
|
if err != nil {
|
||||||
|
// Fall back to array of integers:
|
||||||
|
var values []int64
|
||||||
|
if err := json.Unmarshal(b, &values); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*slice = values
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
*slice = make([]int64, len(values))
|
||||||
|
for i, value := range values {
|
||||||
|
value, err := strconv.ParseInt(value, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
(*slice)[i] = value
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user