package twitterbot 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) } }