initial commit
This commit is contained in:
commit
313bd35b23
8 changed files with 591 additions and 0 deletions
124
user.go
Normal file
124
user.go
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
package discord
|
||||
|
||||
import "time"
|
||||
|
||||
type CacheStatus int
|
||||
|
||||
const (
|
||||
CacheStatusNotFound CacheStatus = iota
|
||||
CacheStatusFound
|
||||
CacheStatusRefresh
|
||||
CacheStatusRemove
|
||||
)
|
||||
|
||||
type cacheUser struct {
|
||||
lastUpdated time.Time
|
||||
user *User
|
||||
remove bool // if true, references to this should be removed
|
||||
}
|
||||
|
||||
type UserCache struct {
|
||||
guildID string
|
||||
lastUpdated time.Time
|
||||
frequency time.Duration
|
||||
users map[string]*cacheUser
|
||||
}
|
||||
|
||||
func NewUserCache(guildID string, updateFrequency time.Duration) *UserCache {
|
||||
return &UserCache{
|
||||
guildID: guildID,
|
||||
lastUpdated: time.Unix(0, 0),
|
||||
frequency: updateFrequency,
|
||||
users: make(map[string]*cacheUser),
|
||||
}
|
||||
}
|
||||
|
||||
func (u *UserCache) Insert(user *User) {
|
||||
cu, ok := u.users[user.ID]
|
||||
if ok {
|
||||
cu.user = user
|
||||
cu.lastUpdated = time.Now()
|
||||
cu.remove = false
|
||||
}
|
||||
u.users[user.ID] = &cacheUser{
|
||||
user: user,
|
||||
lastUpdated: time.Now(),
|
||||
remove: false,
|
||||
}
|
||||
}
|
||||
|
||||
func (u *UserCache) Find(userID string) (*User, CacheStatus) {
|
||||
cu, ok := u.users[userID]
|
||||
if !ok {
|
||||
return nil, CacheStatusNotFound
|
||||
}
|
||||
|
||||
if cu.remove {
|
||||
return nil, CacheStatusRemove
|
||||
}
|
||||
|
||||
if time.Since(cu.lastUpdated) > u.frequency {
|
||||
return cu.user, CacheStatusRefresh
|
||||
}
|
||||
|
||||
return cu.user, CacheStatusFound
|
||||
}
|
||||
|
||||
type UserFlags int
|
||||
|
||||
const (
|
||||
UserFlagsStaff UserFlags = 1 << 1
|
||||
UserFlagsPartner UserFlags = 1 << 2
|
||||
UserFlagsHypesquad UserFlags = 1 << 3
|
||||
UserFlagsBugHunterLevel1 UserFlags = 1 << 4
|
||||
UserFlagsHypesquadOnlineHouse1 UserFlags = 1 << 6
|
||||
UserFlagsHypesquadOnlineHouse2 UserFlags = 1 << 7
|
||||
UserFlagsHypesquadOnlineHouse3 UserFlags = 1 << 8
|
||||
UserFlagsPremiumEarlySupporter UserFlags = 1 << 9
|
||||
UserFlagsTeamPseudoUser UserFlags = 1 << 10
|
||||
UserFlagsBugHunterLevel2 UserFlags = 1 << 14
|
||||
UserFlagsVerifiedBot UserFlags = 1 << 16
|
||||
UserFlagsVerifiedDeveloper UserFlags = 1 << 17
|
||||
UserFlagsCertifiedModerator UserFlags = 1 << 18
|
||||
UserFlagsBotHTTPInteractions UserFlags = 1 << 19
|
||||
UserFlagsActiveDeveloper UserFlags = 1 << 22
|
||||
)
|
||||
|
||||
type PremiumType int
|
||||
|
||||
const (
|
||||
PremiumTypeNone PremiumType = iota
|
||||
PremiumTypeNitroClassic
|
||||
PremiumTypeNitro
|
||||
PremiumTypeNitroBasic
|
||||
)
|
||||
|
||||
// TODO: more fields
|
||||
type User struct {
|
||||
ID string `json:"id"`
|
||||
Username string `json:"username"`
|
||||
GlobalName string `json:"global_name"`
|
||||
Avatar string `json:"avatar"`
|
||||
Bot bool `json:"bot"`
|
||||
System bool `json:"system"`
|
||||
MFAEnabled bool `json:"mfa_enabled"`
|
||||
Banner string `json:"banner"`
|
||||
AccentColor int `json:"accent_color"`
|
||||
Locale string `json:"locale"`
|
||||
Verified bool `json:"verified"`
|
||||
Email string `json:"email"`
|
||||
Flags UserFlags `json:"flags"`
|
||||
PublicFlags UserFlags `json:"public_flags"`
|
||||
PremiumType PremiumType `json:"premium_type"`
|
||||
|
||||
AvatarDecorationData AvatarDecorationData `json:"avatar_decoration_data"`
|
||||
}
|
||||
|
||||
func (u *User) BucketID() string {
|
||||
return u.ID
|
||||
}
|
||||
|
||||
type AvatarDecorationData struct {
|
||||
Asset string `json:"asset"`
|
||||
SkuID string `json:"sku_id"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue