You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.3 KiB

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