client.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package main
  2. import (
  3. "bufio"
  4. "flag"
  5. "fmt"
  6. "github.com/GiedriusS/gomegle"
  7. "log"
  8. "os"
  9. "strings"
  10. "time"
  11. )
  12. func messageListener(o *gomegle.Omegle, logger *log.Logger) {
  13. for {
  14. err := o.ShowTyping()
  15. if err != nil {
  16. logger.Print(err)
  17. }
  18. reader := bufio.NewReader(os.Stdin)
  19. text, err := reader.ReadString('\n')
  20. if err != nil {
  21. err = o.Disconnect()
  22. if err != nil {
  23. logger.Fatal(err)
  24. }
  25. fmt.Println("- Disconnected")
  26. ret := o.GetID()
  27. if ret != nil {
  28. logger.Fatal(ret)
  29. }
  30. continue
  31. }
  32. err = o.StopTyping()
  33. if err != nil {
  34. logger.Print(err)
  35. }
  36. err = o.SendMessage(text)
  37. if err != nil {
  38. logger.Fatal(err)
  39. continue
  40. }
  41. }
  42. }
  43. func main() {
  44. var o gomegle.Omegle
  45. lang := flag.String("lang", "", "Two character language code for searching strangers that only speak that language")
  46. group := flag.String("group", "", "Only search for strangers in this group (\"unmon\" for unmonitored chat)")
  47. server := flag.String("server", "", "Connect to this server to search for strangers")
  48. question := flag.String("question", "", "If not empty then turn on \"spyer\" mode and use this question")
  49. topics := flag.String("topic", "", "A comma delimited list of topics you are interested in")
  50. cansavequestion := flag.Bool("cansavequestion", false, "If true then in \"spyer\" mode omegle will be permitted to re-use your question")
  51. wantsspy := flag.Bool("wantsspy", false, "If true then \"spyee\" mode is started")
  52. asl := flag.String("asl", "", "If not empty then this message will be sent as soon as you start talking to a stranger")
  53. collegeAuth := flag.String("collegeauth", "", "If not empty then will be used as college authentication code")
  54. college := flag.String("college", "", "If not empty then will be used as college authentication name (must match real college name)")
  55. anyCollege := flag.Bool("anycollege", false, "If true then in college mode we will try to connect to any college")
  56. flag.Parse()
  57. logger := log.New(os.Stderr, "", log.LstdFlags)
  58. if *server != "" {
  59. o.Server = *server
  60. }
  61. o.CollegeAuth = *collegeAuth
  62. o.College = *college
  63. o.AnyCollege = *anyCollege
  64. o.Question = *question
  65. o.Cansavequestion = *cansavequestion
  66. o.Wantsspy = *wantsspy
  67. o.Lang = *lang
  68. o.Group = *group
  69. if *topics != "" {
  70. o.Topics = strings.Split(*topics, ",")
  71. }
  72. ret := o.GetID()
  73. if ret != nil {
  74. logger.Fatal(ret)
  75. }
  76. go messageListener(&o, logger)
  77. for {
  78. st, msg, err := o.UpdateEvents()
  79. if err != nil {
  80. logger.Fatal(err)
  81. }
  82. for i := range st {
  83. num, okEvent := st[i].(gomegle.Event)
  84. status, okStatus := st[i].(gomegle.Status)
  85. if okStatus {
  86. fmt.Printf("%% Got server event. Count: %v; Force_unmon: %v; SpyQueueTime: %v; SpyeeQueueTime: %v\n",
  87. status.Count, status.ForceUnmon, status.SpyQueueTime, status.SpyeeQueueTime)
  88. continue
  89. }
  90. if !okEvent {
  91. continue
  92. }
  93. switch num {
  94. case gomegle.ANTINUDEBANNED:
  95. fmt.Printf("%% You have been banned for possible bad behaviour!\n")
  96. fmt.Printf("%% Pass -group=\"unmon\" to join unmonitored chat\n")
  97. os.Exit(1)
  98. return
  99. case gomegle.WAITING:
  100. fmt.Println("> Waiting...")
  101. case gomegle.CONNECTED:
  102. fmt.Println("+ Connected")
  103. if *asl != "" && *question == "" && *wantsspy == false {
  104. err = o.SendMessage(*asl)
  105. fmt.Println("+ Sent ASL")
  106. if err != nil {
  107. logger.Print(err)
  108. }
  109. }
  110. case gomegle.DISCONNECTED:
  111. fmt.Println("- Disconnected")
  112. ret := o.GetID()
  113. if ret != nil {
  114. logger.Fatal(ret)
  115. }
  116. case gomegle.TYPING:
  117. fmt.Println("> Stranger is typing")
  118. case gomegle.QUESTION:
  119. fmt.Printf("> Question: %s\n", msg[i][0])
  120. case gomegle.SPYTYPING:
  121. fmt.Printf("> %s is typing\n", msg[i][0])
  122. case gomegle.SPYSTOPPEDTYPING:
  123. fmt.Printf("> %s stopped typing\n", msg[i][0])
  124. case gomegle.SPYDISCONNECTED:
  125. fmt.Printf("> %s disconnected\n", msg[i][0])
  126. ret := o.GetID()
  127. if ret != nil {
  128. logger.Fatal(ret)
  129. }
  130. case gomegle.SPYMESSAGE:
  131. fmt.Printf("%s: %s\n", msg[i][0], msg[i][1])
  132. case gomegle.MESSAGE:
  133. fmt.Printf("%s\n", msg[i][0])
  134. case gomegle.STOPPEDTYPING:
  135. fmt.Println("> Stranger stopped typing")
  136. case gomegle.CONNECTIONDIED:
  137. fmt.Println("- Error occured, disconnected")
  138. ret := o.GetID()
  139. if ret != nil {
  140. logger.Fatal(ret)
  141. }
  142. case gomegle.ERROR:
  143. fmt.Printf("- Error: %s (sleeping 500ms)\n", msg[i][0])
  144. time.Sleep(500 * time.Millisecond)
  145. ret := o.GetID()
  146. if ret != nil {
  147. logger.Fatal(ret)
  148. }
  149. case gomegle.SERVERMESSAGE:
  150. fmt.Printf("%% %s\n", msg[i][0])
  151. case gomegle.RECAPTCHAREQUIRED:
  152. fmt.Printf("%% You need to go to the omegle website to enter a reCAPTCHA (%s)\n", msg[i][0])
  153. case gomegle.RECAPTCHAREJECTED:
  154. fmt.Printf("%% The reCAPTCHA was rejected (%s)\n", msg[i][0])
  155. case gomegle.PARTNERCOLLEGE:
  156. fmt.Printf("%% Partner college: %s\n", msg[i][0])
  157. case gomegle.COMMONLIKES:
  158. fmt.Printf("%% Shared topics:")
  159. for j := range msg[i] {
  160. fmt.Printf(" %s", msg[i][j])
  161. }
  162. fmt.Printf("\n")
  163. }
  164. }
  165. }
  166. }