arnaucube
arnaucube/echo-botnetPublic Self-hosted repository
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}