50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
package config
|
|
|
|
import (
|
|
"github.com/duke-git/lancet/v2/slice"
|
|
)
|
|
|
|
type userConfig struct {
|
|
ID int64 `toml:"id" mapstructure:"id" json:"id"` // telegram user id
|
|
Storages []string `toml:"storages" mapstructure:"storages" json:"storages"` // storage names
|
|
Blacklist bool `toml:"blacklist" mapstructure:"blacklist" json:"blacklist"` // 黑名单模式, storage names 中的存储将不会被使用, 默认为白名单模式
|
|
}
|
|
|
|
func (c *Config) GetStorageNamesByUserID(userID int64) []string {
|
|
for _, user := range c.Users {
|
|
if user.ID == userID {
|
|
if user.Blacklist {
|
|
allStorages := make([]string, 0, len(c.Storages))
|
|
for _, storage := range c.Storages {
|
|
allStorages = append(allStorages, storage.GetName())
|
|
}
|
|
return slice.Compact(slice.Difference(allStorages, user.Storages))
|
|
} else {
|
|
return user.Storages
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (c *Config) GetUsersID() []int64 {
|
|
var ids []int64
|
|
for _, user := range c.Users {
|
|
ids = append(ids, user.ID)
|
|
}
|
|
return ids
|
|
}
|
|
|
|
func (c *Config) HasStorage(userID int64, storageName string) bool {
|
|
for _, user := range c.Users {
|
|
if user.ID == userID {
|
|
if user.Blacklist {
|
|
return !slice.Contain(user.Storages, storageName)
|
|
} else {
|
|
return slice.Contain(user.Storages, storageName)
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|