flock-botnet/optionMarkovFlockBotnet.go
optionMarkovFlockBotnet.goRaw
1package main
2
3import (
4 "bufio"
5 "fmt"
6 "log"
7 "os"
8 "strconv"
9 "strings"
10
11 "github.com/dghubble/go-twitter/twitter"
12)
13
14func isRT(text string) bool {
15 tweetWords := strings.Split(text, " ")
16 for i := 0; i < len(tweetWords); i++ {
17 if tweetWords[i] == "RT" {
18 c.Red(text)
19 return true
20 }
21 }
22 return false
23}
24func generateMarkovResponse(states []State, word string) string {
25 generatedText := markov.generateText(states, word, 15)
26 return generatedText
27}
28func processTweet(states []State, flockUser *twitter.Client, botScreenName string, keywords []string, tweet *twitter.Tweet) {
29 c.Yellow("bot @" + botScreenName + " - New tweet detected:")
30 fmt.Println(tweet.Text)
31
32 tweetWords := strings.Split(tweet.Text, " ")
33 generatedText := "word no exist on the memory"
34 for i := 0; i < len(tweetWords) && generatedText == "word no exist on the memory"; i++ {
35 fmt.Println(strconv.Itoa(i) + " - " + tweetWords[i])
36 generatedText = generateMarkovResponse(states, tweetWords[i])
37 }
38 c.Yellow("bot @" + botScreenName + " posting response")
39 fmt.Println(tweet.ID)
40 replyTweet(flockUser, "@"+tweet.User.ScreenName+" "+generatedText, tweet.ID)
41 waitTime(1)
42}
43func startStreaming(states []State, flockUser *twitter.Client, botScreenName string, keywords []string) {
44 // Convenience Demux demultiplexed stream messages
45 demux := twitter.NewSwitchDemux()
46 demux.Tweet = func(tweet *twitter.Tweet) {
47 if isRT(tweet.Text) == false {
48 processTweet(states, flockUser, botScreenName, keywords, tweet)
49 }
50 }
51 demux.DM = func(dm *twitter.DirectMessage) {
52 fmt.Println(dm.SenderID)
53 }
54 demux.Event = func(event *twitter.Event) {
55 fmt.Printf("%#v\n", event)
56 }
57
58 fmt.Println("Starting Stream...")
59 // FILTER
60 filterParams := &twitter.StreamFilterParams{
61 Track: keywords,
62 StallWarnings: twitter.Bool(true),
63 }
64 stream, err := flockUser.Streams.Filter(filterParams)
65 if err != nil {
66 log.Fatal(err)
67 }
68 // Receive messages until stopped or stream quits
69 demux.HandleChan(stream.Messages)
70
71 // Wait for SIGINT and SIGTERM (HIT CTRL-C)
72 /*ch := make(chan os.Signal)
73 signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
74 log.Println(<-ch)
75
76 fmt.Println("Stopping Stream...")
77 stream.Stop()*/
78}
79func optionMarkovFlockBotnet(flock Flock) {
80 c.Green("Starting Markov's Flock botnet")
81 fmt.Println("generating Markov chains")
82 inputText, _ := readTxt("text.txt")
83 states := markov.train(inputText)
84
85 //getting the keywords
86 c.Purple("entry words to stream tweets (separated by comma): ")
87 newcommand := bufio.NewReader(os.Stdin)
88 text, _ := newcommand.ReadString('\n')
89 text = strings.TrimSpace(text)
90 text = strings.Replace(text, " ", "", -1)
91 keywords := strings.Split(text, ",")
92 c.Purple("total keywords: " + strconv.Itoa(len(keywords)))
93 fmt.Print("keywords to follow: ")
94 fmt.Println(keywords)
95
96 c.Red("Are you sure? [y/n]")
97 newcommand = bufio.NewReader(os.Stdin)
98 answer, _ := newcommand.ReadString('\n')
99 answer = strings.TrimSpace(answer)
100 switch answer {
101 case "y":
102 fmt.Println("ok, you are sure")
103 for i := 0; i < len(flock.Clients); i++ {
104 go startStreaming(states, flock.Clients[i], flock.ScreenNames[i], keywords)
105 }
106 break
107 default:
108 fmt.Println("Operation cancelled")
109 break
110 }
111}