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	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}