go: Unify react implementation
parent
9f2f3e8e3b
commit
e180dec331
@ -0,0 +1,53 @@
|
||||
package modules
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/bwmarrin/discordgo"
|
||||
)
|
||||
|
||||
var reactLock sync.Mutex
|
||||
var reactCallbacks = make(map[string]reactEntry)
|
||||
|
||||
type reactCallback func(s *discordgo.Session, react *discordgo.MessageReactionAdd, info interface{})
|
||||
type reactEntry struct {
|
||||
acceptedEmoji []string
|
||||
callback reactCallback
|
||||
info interface{}
|
||||
}
|
||||
|
||||
func queueForReact(messageID string, acceptedEmoji []string, info interface{}, callback reactCallback) {
|
||||
reactLock.Lock()
|
||||
defer reactLock.Unlock()
|
||||
|
||||
reactCallbacks[messageID] = reactEntry{
|
||||
acceptedEmoji: acceptedEmoji,
|
||||
callback: callback,
|
||||
info: info,
|
||||
}
|
||||
}
|
||||
|
||||
func CheckForReact(s *discordgo.Session, r *discordgo.MessageReactionAdd) {
|
||||
entry, ok := reactCallbacks[r.MessageID]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
reactLock.Lock()
|
||||
foundEmoji := false
|
||||
for _, v := range entry.acceptedEmoji {
|
||||
if r.Emoji.Name == v {
|
||||
foundEmoji = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !foundEmoji {
|
||||
reactLock.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
delete(reactCallbacks, r.MessageID)
|
||||
reactLock.Unlock()
|
||||
|
||||
entry.callback(s, r, entry.info)
|
||||
}
|
Loading…
Reference in New Issue