84 lines
2.2 KiB
Go
84 lines
2.2 KiB
Go
package bot
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"git.1750studios.com/ToddShepard/DB640/internal/config"
|
|
"git.1750studios.com/ToddShepard/DB640/internal/database"
|
|
"git.1750studios.com/ToddShepard/DB640/internal/twitter"
|
|
"github.com/jinzhu/gorm"
|
|
)
|
|
|
|
var stream *twitter.Stream
|
|
|
|
// Init initzializes the bot and subscribes the magic hashtag feed
|
|
func Init() {
|
|
var err error
|
|
|
|
err = database.Open(config.C.Database.Dialect, config.C.Database.Connection)
|
|
if err != nil {
|
|
log.Fatalf("could not establish database connection: %+v", err)
|
|
}
|
|
|
|
twitter.Init()
|
|
stream, err = twitter.GetStreamForTag(config.C.Twitter.MagicHashtag)
|
|
if err != nil {
|
|
log.Fatalf("Could not establish twitter stream: %+v", err)
|
|
}
|
|
|
|
twitter.StreamDemux(stream, handleHashtagTweet)
|
|
}
|
|
|
|
// DeInit stops the stream and deinitzializes the bot
|
|
func DeInit() {
|
|
stream.Stop()
|
|
database.Close()
|
|
}
|
|
|
|
func handleHashtagTweet(tweet *twitter.Tweet) {
|
|
msg, tags := twitter.GetTextAndHashtags(tweet)
|
|
// Ignore retweets
|
|
if tweet.RetweetedStatus != nil {
|
|
log.Printf("%s: %s - IGNORED (RT)\n", tweet.User.ScreenName, msg)
|
|
return
|
|
}
|
|
// Ignore replys
|
|
if tweet.InReplyToStatusID != 0 {
|
|
log.Printf("%s: %s - IGNORED (RPLY)\n", tweet.User.ScreenName, msg)
|
|
return
|
|
}
|
|
// Ignore if only magic hashtag is given
|
|
if len(tags) < 2 {
|
|
log.Printf("%s: %s - IGNORED (<2#)\n", tweet.User.ScreenName, msg)
|
|
return
|
|
}
|
|
log.Printf("%s: %s\n", tweet.User.ScreenName, msg)
|
|
go findCodes(tweet)
|
|
}
|
|
|
|
func findCodes(tweet *twitter.Tweet) {
|
|
_, tags := twitter.GetTextAndHashtags(tweet)
|
|
var betriebsstellen []database.Betriebsstelle
|
|
for _, tag := range tags {
|
|
code := strings.ReplaceAll(tag.Text, "_", " ")
|
|
var bs database.Betriebsstelle
|
|
if database.Db.First(&bs, "code = ?", code).Error != gorm.ErrRecordNotFound {
|
|
betriebsstellen = append(betriebsstellen, bs)
|
|
}
|
|
}
|
|
sendReply(tweet, betriebsstellen)
|
|
}
|
|
|
|
func sendReply(tweet *twitter.Tweet, betriebsstellen []database.Betriebsstelle) {
|
|
var reply string
|
|
for _, bs := range betriebsstellen {
|
|
reply = reply + bs.Code + ": " + bs.Name + "\n"
|
|
}
|
|
reply = reply[0 : len(reply)-1]
|
|
_, _, err := twitter.SendTweet(reply, tweet)
|
|
if err != nil {
|
|
log.Printf("Cannot send reply, error: %+v", err)
|
|
}
|
|
}
|