l2.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package main
  2. import (
  3. "fmt"
  4. tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
  5. "github.com/joho/godotenv"
  6. "os"
  7. "log"
  8. "net/http"
  9. "net/url"
  10. "encoding/json"
  11. "crypto/tls"
  12. "time"
  13. "strconv"
  14. )
  15. var userStates = make(map[int64]string)
  16. var Proxy = make(map[int64]string)
  17. type DataIP struct {
  18. IP string `json:"query"`
  19. Country string `json:"country"`
  20. ISP string `json:"isp"`
  21. }
  22. func ProxyCheck(proxy string) (bool, string, string, string) {
  23. proxyurl, err := url.Parse(proxy)
  24. if err != nil {
  25. fmt.Println(err)
  26. }
  27. transport := &http.Transport{
  28. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  29. Proxy: http.ProxyURL(proxyurl),
  30. }
  31. client := &http.Client{
  32. Transport: transport,
  33. Timeout: 20 * time.Second,
  34. }
  35. req, err := http.NewRequest("GET", "http://ip-api.com/json", nil)
  36. if err != nil {
  37. fmt.Println(err)
  38. }
  39. resp, err := client.Do(req)
  40. if err != nil {
  41. return false, "Нет", "Нет", "Нет"
  42. fmt.Println(err)
  43. }
  44. defer resp.Body.Close()
  45. var data DataIP
  46. err = json.NewDecoder(resp.Body).Decode(&data)
  47. if err != nil {
  48. fmt.Println(err)
  49. }
  50. return true, data.IP, data.Country, data.ISP
  51. }
  52. func main() {
  53. err := godotenv.Load()
  54. if err != nil {
  55. log.Fatalf("%v\n", err)
  56. }
  57. tg := os.Getenv("TG_TOKEN")
  58. bot, err := tgbotapi.NewBotAPI(tg)
  59. if err != nil {
  60. log.Fatalf("%v\n", err)
  61. }
  62. bot.Debug = true
  63. u := tgbotapi.NewUpdate(0)
  64. u.Timeout = 60
  65. updates := bot.GetUpdatesChan(u)
  66. for update := range updates {
  67. if update.Message == nil { continue }
  68. userID := update.Message.From.ID
  69. if update.Message.IsCommand() {
  70. if update.Message.Command() == "start" {
  71. userStates[userID] = "wating"
  72. bot.Send(tgbotapi.NewMessage(userID, "Введите прокси"))
  73. }
  74. continue
  75. }
  76. switch userStates[userID] {
  77. case "wating":
  78. prox := update.Message.Text
  79. Proxy[userID] = prox
  80. userStates[userID] = ""
  81. status, ip, country, isp := ProxyCheck(Proxy[userID])
  82. stat := strconv.FormatBool(status)
  83. msg := "Работа прокси: " + stat + "\nIP: " + ip + "\nСтрана: " + country + "\nПровайдер: " + isp
  84. bot.Send(tgbotapi.NewMessage(userID, msg))
  85. }
  86. }
  87. }