echo-botnet/streamTweets.go
streamTweets.goRaw
1package main
2
3import (
4 "fmt"
5 "log"
6 "math/rand"
7 "strings"
8 "time"
9
10 "github.com/dghubble/go-twitter/twitter"
11 "github.com/fatih/color"
12)
13
14func isRT(tweet *twitter.Tweet) bool {
15 tweetWords := strings.Split(tweet.Text, " ")
16 for i := 0; i < len(tweetWords); i++ {
17 if tweetWords[i] == "RT" {
18 return true
19 }
20 }
21 return false
22}
23func isFromBotnet(tweet *twitter.Tweet) bool {
24 for i := 0; i < len(botnet); i++ {
25 if botnet[i].Title == tweet.User.ScreenName {
26 return true
27 }
28 }
29 return false
30}
31
32func getRandomReplyFromReplies(replies []string) string {
33 rand.Seed(time.Now().UnixNano())
34 random := rand.Intn(len(replies))
35 return replies[random]
36}
37
38func replyTweet(client *twitter.Client, text string, inReplyToStatusID int64) {
39 tweet, httpResp, err := client.Statuses.Update(text, &twitter.StatusUpdateParams{
40 InReplyToStatusID: inReplyToStatusID,
41 })
42 if err != nil {
43 log.Println(err)
44 }
45 if httpResp.Status != "200 OK" {
46 color.Red("error: " + httpResp.Status)
47 log.Println("error" + httpResp.Status)
48 color.Cyan("maybe twitter has blocked the account, CTRL+C, wait 15 minutes and try again")
49 log.Println("maybe twitter has blocked the account, CTRL+C, wait 15 minutes and try again")
50 }
51 log.Println("tweet posted: " + tweet.Text)
52}
53
54func startStreaming(bot *Bot) {
55 // Convenience Demux demultiplexed stream messages
56 demux := twitter.NewSwitchDemux()
57
58 fmt.Println("Starting Stream...")
59 // FILTER
60 filterParams := &twitter.StreamFilterParams{
61 Track: keywords,
62 StallWarnings: twitter.Bool(true),
63 }
64 stream, err := bot.Client.Streams.Filter(filterParams)
65 check(err)
66 // Receive messages until stopped or stream quits
67 for message := range stream.Messages {
68 demux.All(message)
69 switch msg := message.(type) {
70 case *twitter.Tweet:
71 r := handleTweet(msg, bot)
72 if r {
73 log.Println("stopping stream")
74 stream.Stop()
75 }
76 default:
77 }
78 }
79}
80
81func handleTweet(tweet *twitter.Tweet, bot *Bot) bool {
82 r := false
83 if isRT(tweet) == false && isFromBotnet(tweet) == false {
84 //processTweet(botnetUser, botScreenName, keywords, tweet)
85 log.Println("[bot @" + bot.Title + "] - New tweet detected:")
86 log.Println(tweet.Text)
87 reply := getRandomReplyFromReplies(replies)
88 log.Println("reply: " + reply + ", to: @" + tweet.User.ScreenName /* + ". tweet ID: " + tweet.ID*/)
89
90 //replyTweet(bot, "@"+tweet.User.ScreenName+" "+reply, tweet.ID)
91 color.Green("@" + bot.Title + " replying tweet!")
92 bot.SinceTweeted = time.Now().Unix()
93 r = true
94 }
95 return r
96}