add the list command
This commit is contained in:
parent
2641a40f71
commit
47cc9ece67
3 changed files with 61 additions and 7 deletions
51
db/db.go
51
db/db.go
|
@ -15,6 +15,8 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
LATEST_EVENT = []byte("latestEvent")
|
LATEST_EVENT = []byte("latestEvent")
|
||||||
|
MAPPERS = []byte("mapper")
|
||||||
|
CHANNELS = []byte("channels")
|
||||||
)
|
)
|
||||||
|
|
||||||
type Db struct {
|
type Db struct {
|
||||||
|
@ -56,10 +58,47 @@ func (db *Db) IterTrackingChannels(mapperId int, fn func(channelId string) error
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop over tracked mappers
|
// Loop over tracked mappers for this channel
|
||||||
func (db *Db) IterTrackedMappers(fn func(userId int) error) (err error) {
|
func (db *Db) IterChannelTrackedMappers(channelId string, fn func(userId int) error) (err error) {
|
||||||
err = db.DB.View(func(tx *bolt.Tx) error {
|
err = db.DB.View(func(tx *bolt.Tx) error {
|
||||||
mappers := tx.Bucket([]byte("mapper"))
|
channels := tx.Bucket(CHANNELS)
|
||||||
|
if channels == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
channel := channels.Bucket([]byte(channelId))
|
||||||
|
if channel == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
tracks := channel.Bucket([]byte("tracks"))
|
||||||
|
if tracks == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
c := tracks.Cursor()
|
||||||
|
for k, _ := c.First(); k != nil; k, _ = c.Next() {
|
||||||
|
mapperId, err := strconv.Atoi(string(k))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fn(mapperId)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Loop over all tracked mappers
|
||||||
|
func (db *Db) IterAllTrackedMappers(fn func(userId int) error) (err error) {
|
||||||
|
err = db.DB.View(func(tx *bolt.Tx) error {
|
||||||
|
mappers := tx.Bucket(MAPPERS)
|
||||||
if mappers == nil {
|
if mappers == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -184,7 +223,7 @@ func (db *Db) ChannelTrackMapper(channelId string, mapperId int, priority int) (
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
channels, err := tx.CreateBucketIfNotExists([]byte("channels"))
|
channels, err := tx.CreateBucketIfNotExists(CHANNELS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -214,7 +253,7 @@ func (db *Db) Close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMapper(tx *bolt.Tx, userId int) (mapper *bolt.Bucket) {
|
func getMapper(tx *bolt.Tx, userId int) (mapper *bolt.Bucket) {
|
||||||
mappers := tx.Bucket([]byte("mapper"))
|
mappers := tx.Bucket(MAPPERS)
|
||||||
if mappers == nil {
|
if mappers == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -228,7 +267,7 @@ func getMapper(tx *bolt.Tx, userId int) (mapper *bolt.Bucket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMapperMut(tx *bolt.Tx, userId int) (mapper *bolt.Bucket, err error) {
|
func getMapperMut(tx *bolt.Tx, userId int) (mapper *bolt.Bucket, err error) {
|
||||||
mappers, err := tx.CreateBucketIfNotExists([]byte("mapper"))
|
mappers, err := tx.CreateBucketIfNotExists(MAPPERS)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,6 +300,21 @@ func (bot *Bot) newMessageHandler(s *discordgo.Session, m *discordgo.MessageCrea
|
||||||
}
|
}
|
||||||
|
|
||||||
bot.ChannelMessageSend(m.ChannelID, fmt.Sprintf("subscribed to %+v", mapper))
|
bot.ChannelMessageSend(m.ChannelID, fmt.Sprintf("subscribed to %+v", mapper))
|
||||||
|
|
||||||
|
case "list":
|
||||||
|
mappers := make([]string, 0)
|
||||||
|
bot.db.IterChannelTrackedMappers(m.ChannelID, func(userId int) error {
|
||||||
|
var mapper osuapi.User
|
||||||
|
mapper, err = bot.api.GetUser(strconv.Itoa(userId))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
mappers = append(mappers, mapper.Username)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
bot.ChannelMessageSend(m.ChannelID, "tracking: "+strings.Join(mappers, ", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
|
@ -22,7 +22,7 @@ func RunScraper(config *config.Config, bot *discord.Bot, db *db.Db, api *osuapi.
|
||||||
for ; true; <-Ticker.C {
|
for ; true; <-Ticker.C {
|
||||||
// build a list of currently tracked mappers
|
// build a list of currently tracked mappers
|
||||||
trackedMappers := make(map[int]int)
|
trackedMappers := make(map[int]int)
|
||||||
db.IterTrackedMappers(func(userId int) error {
|
db.IterAllTrackedMappers(func(userId int) error {
|
||||||
trackedMappers[userId] = 1
|
trackedMappers[userId] = 1
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue