From 38a9d2eda28567409fefda34fab7dd964f51aec8 Mon Sep 17 00:00:00 2001 From: Luther Wen Xu Date: Mon, 18 Nov 2019 15:30:21 +0800 Subject: [PATCH] level: Generalize level processing instead of labelling it as roles --- levels.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 2 +- roles.go | 53 ----------------------------------------------------- xp.go | 2 +- 4 files changed, 55 insertions(+), 55 deletions(-) create mode 100644 levels.go delete mode 100644 roles.go diff --git a/levels.go b/levels.go new file mode 100644 index 0000000..b6313bf --- /dev/null +++ b/levels.go @@ -0,0 +1,53 @@ +package main + +import ( + "io/ioutil" + "strings" + "sync" + "time" + + "github.com/bwmarrin/discordgo" +) + +const guildID = "645550569573842945" + +var levelMutex sync.Mutex +var levelQueue = make(map[string]bool) +var assignedLevels = make(map[string]int) +var rolesFromLevel []string + +func init() { + levels, _ := ioutil.ReadFile("levels.txt") + rolesFromLevel = strings.Split(string(levels), "\n") + for k, v := range rolesFromLevel { + rolesFromLevel[k] = strings.TrimSpace(v) + } +} + +func addToLevelQueue(discordID string) { + levelMutex.Lock() + defer levelMutex.Unlock() + levelQueue[discordID] = true +} + +func listenToLevelUpdate(dg *discordgo.Session) { + for { + levelMutex.Lock() + for k, v := range levelQueue { + if !v { + continue + } + levelQueue[k] = false + level, _ := getLevelAndXP(dg, k) + if assignedLevels[k] != level { + assignedLevels[k] = level + err := dg.GuildMemberRoleAdd(guildID, k, rolesFromLevel[level-1]) + if err != nil { + logError(dg, "assignlevel", err) + } + } + } + levelMutex.Unlock() + time.Sleep(5 * time.Second) + } +} diff --git a/main.go b/main.go index e294c4e..8418d10 100644 --- a/main.go +++ b/main.go @@ -24,7 +24,7 @@ func main() { if err != nil { fmt.Println("Error opening Discord session:", err) } - go assignRole(dg) + go listenToLevelUpdate(dg) sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt, os.Kill) diff --git a/roles.go b/roles.go deleted file mode 100644 index e1a44b8..0000000 --- a/roles.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "io/ioutil" - "strings" - "sync" - "time" - - "github.com/bwmarrin/discordgo" -) - -const guildID = "645550569573842945" - -var roleMutex sync.Mutex -var roleQueue = make(map[string]bool) -var assignedRoles = make(map[string]int) -var roleFromLevel []string - -func init() { - roles, _ := ioutil.ReadFile("roles.txt") - roleFromLevel = strings.Split(string(roles), "\n") - for k, v := range roleFromLevel { - roleFromLevel[k] = strings.TrimSpace(v) - } -} - -func addToRoleQueue(discordID string) { - roleMutex.Lock() - defer roleMutex.Unlock() - roleQueue[discordID] = true -} - -func assignRole(dg *discordgo.Session) { - for { - roleMutex.Lock() - for k, v := range roleQueue { - if !v { - continue - } - roleQueue[k] = false - level, _ := getLevelAndXP(dg, k) - if assignedRoles[k] != level { - assignedRoles[k] = level - err := dg.GuildMemberRoleAdd(guildID, k, roleFromLevel[level-1]) - if err != nil { - logError(dg, "assignRole", err) - } - } - } - roleMutex.Unlock() - time.Sleep(5 * time.Second) - } -} diff --git a/xp.go b/xp.go index 09be34e..86ac515 100644 --- a/xp.go +++ b/xp.go @@ -51,7 +51,7 @@ func incrementXP(dg *discordgo.Session, discordID string) { logError(dg, "incrementXP", "commit", discordID, err) return } - addToRoleQueue(discordID) + addToLevelQueue(discordID) } func getLevelAndXP(dg *discordgo.Session, discordID string) (int, int) {