package main import ( "fmt" "log" "math/rand" "strings" "time" "github.com/dghubble/go-twitter/twitter" "github.com/fatih/color" ) func isRT(tweet *twitter.Tweet) bool { tweetWords := strings.Split(tweet.Text, " ") for i := 0; i < len(tweetWords); i++ { if tweetWords[i] == "RT" { return true } } return false } func isFromBotnet(tweet *twitter.Tweet) bool { for i := 0; i < len(botnet); i++ { if botnet[i].Title == tweet.User.ScreenName { return true } } return false } func getRandomReplyFromReplies(replies []string) string { rand.Seed(time.Now().UnixNano()) random := rand.Intn(len(replies)) return replies[random] } func replyTweet(client *twitter.Client, text string, inReplyToStatusID int64) { tweet, httpResp, err := client.Statuses.Update(text, &twitter.StatusUpdateParams{ InReplyToStatusID: inReplyToStatusID, }) if err != nil { log.Println(err) } if httpResp.Status != "200 OK" { color.Red("error: " + httpResp.Status) log.Println("error" + httpResp.Status) color.Cyan("maybe twitter has blocked the account, CTRL+C, wait 15 minutes and try again") log.Println("maybe twitter has blocked the account, CTRL+C, wait 15 minutes and try again") } log.Println("tweet posted: " + tweet.Text) } func startStreaming(bot *Bot) { // Convenience Demux demultiplexed stream messages demux := twitter.NewSwitchDemux() fmt.Println("Starting Stream...") // FILTER filterParams := &twitter.StreamFilterParams{ Track: keywords, StallWarnings: twitter.Bool(true), } stream, err := bot.Client.Streams.Filter(filterParams) check(err) // Receive messages until stopped or stream quits for message := range stream.Messages { demux.All(message) switch msg := message.(type) { case *twitter.Tweet: r := handleTweet(msg, bot) if r { log.Println("stopping stream") stream.Stop() } default: } } } func handleTweet(tweet *twitter.Tweet, bot *Bot) bool { r := false if isRT(tweet) == false && isFromBotnet(tweet) == false { //processTweet(botnetUser, botScreenName, keywords, tweet) log.Println("[bot @" + bot.Title + "] - New tweet detected:") log.Println(tweet.Text) reply := getRandomReplyFromReplies(replies) log.Println("reply: " + reply + ", to: @" + tweet.User.ScreenName /* + ". tweet ID: " + tweet.ID*/) //replyTweet(bot, "@"+tweet.User.ScreenName+" "+reply, tweet.ID) color.Green("@" + bot.Title + " replying tweet!") bot.SinceTweeted = time.Now().Unix() r = true } return r }