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 demux.Tweet = func(tweet *twitter.Tweet) {
58 if isRT(tweet) == false && isFromBotnet(tweet) == false {
59 //processTweet(botnetUser, botScreenName, keywords, tweet)
60 log.Println("[bot @" + bot.Title + "] - New tweet detected:")
61 log.Println(tweet.Text)
62 reply := getRandomReplyFromReplies(replies)
63 log.Println("reply: " + reply + ", to: @" + tweet.User.ScreenName /* + ". tweet ID: " + tweet.ID*/)
64
65 //replyTweet(bot, "@"+tweet.User.ScreenName+" "+reply, tweet.ID)
66 color.Green("replying tweet!")
67 bot.SinceTweeted = time.Now().Unix()
68 }
69 }
70
71 fmt.Println("Starting Stream...")
72 // FILTER
73 filterParams := &twitter.StreamFilterParams{
74 Track: keywords,
75 StallWarnings: twitter.Bool(true),
76 }
77 stream, err := bot.Client.Streams.Filter(filterParams)
78 check(err)
79 // Receive messages until stopped or stream quits
80 demux.HandleChan(stream.Messages)
81 /*for message := range stream.Messages {
82 demux.Handle(message)
83 log.Println("stopping stream")
84 stream.Stop()
85 }*/
86}