You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.4 KiB

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
}