Merge branch 'master' of github.com:velour/catbase

* 'master' of github.com:velour/catbase:
  Change to use the lua config…
  Oh, and handle the plurals…
  Don't count "a" and "it" toward the emojification score
  one more try
  grab the bot's bot id from the message response and use that to avoid self-reply loops
This commit is contained in:
Chris Sexton 2017-12-19 13:38:31 -05:00
commit 5e52c3bb16
4 changed files with 34 additions and 15 deletions

View File

@ -91,6 +91,7 @@ type Config struct {
}
Emojify struct {
Chance float64
Scoreless []string
}
Reaction struct {
GeneralChance float64
@ -109,7 +110,6 @@ type Config struct {
MinPush int
MaxPush int
}
BotList map[string]bool
}
func init() {

View File

@ -29,7 +29,11 @@ config = {
YourChance = 0.4
},
Emojify = {
Chance = 0.02
Chance = 0.02,
Scoreless = {
"a",
"it"
}
},
DB = {
File = "catbase.db",

View File

@ -67,23 +67,30 @@ func (p *EmojifyMePlugin) Message(message msg.Message) bool {
}
}
inertTokens := p.Bot.Config().Emojify.Scoreless
emojied := 0.0
tokens := strings.Fields(strings.ToLower(message.Body))
for i, token := range tokens {
if _, ok := p.Emoji[token]; ok {
emojied++
if !stringsContain(inertTokens, token) {
emojied++
}
tokens[i] = ":" + token + ":"
} else if strings.HasSuffix(token, "s") {
//Check to see if we can strip the trailing "es" off and get an emoji
temp := strings.TrimSuffix(token, "s")
if _, ok := p.Emoji[temp]; ok {
emojied++
if !stringsContain(inertTokens, temp) {
emojied++
}
tokens[i] = ":" + temp + ":s"
} else if strings.HasSuffix(token, "es") {
//Check to see if we can strip the trailing "es" off and get an emoji
temp := strings.TrimSuffix(token, "es")
if _, ok := p.Emoji[temp]; ok {
emojied++
if !stringsContain(inertTokens, temp) {
emojied++
}
tokens[i] = ":" + temp + ":es"
}
}
@ -114,3 +121,12 @@ func (p *EmojifyMePlugin) RegisterWeb() *string {
}
func (p *EmojifyMePlugin) ReplyMessage(message msg.Message, identifier string) bool { return false }
func stringsContain(haystack []string, needle string) bool {
for _, s := range haystack {
if s == needle {
return true
}
}
return false
}

View File

@ -37,6 +37,8 @@ type Slack struct {
users map[string]string
myBotID string
emoji map[string]string
eventReceived func(msg.Message)
@ -228,6 +230,9 @@ func (s *Slack) SendMessageType(channel, message string, meMessage bool) (string
type MessageResponse struct {
OK bool `json:"ok"`
Timestamp string `json:"ts"`
Message struct {
BotID string `json:"bot_id"`
} `json:"message"`
}
var mr MessageResponse
@ -240,6 +245,8 @@ func (s *Slack) SendMessageType(channel, message string, meMessage bool) (string
return "", errors.New("failure response received")
}
s.myBotID = mr.Message.BotID
return mr.Timestamp, err
}
@ -392,16 +399,8 @@ func (s *Slack) Serve() error {
}
switch msg.Type {
case "message":
botOK := true
if msg.BotID != "" {
u, _ := s.getUser(msg.User)
if u == "" && msg.Username != "" {
u = msg.Username
}
log.Printf("User: %s, BotList: %+v", u, s.config.BotList)
botOK = s.config.BotList[strings.Title(u)]
}
if botOK && !msg.Hidden && msg.ThreadTs == "" {
isItMe := msg.BotID != "" && msg.BotID == s.myBotID
if !isItMe && !msg.Hidden && msg.ThreadTs == "" {
m := s.buildMessage(msg)
if m.Time.Before(s.lastRecieved) {
log.Printf("Ignoring message: %+v\nlastRecieved: %v msg: %v", msg.ID, s.lastRecieved, m.Time)