93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||
"github.com/joho/godotenv"
|
||
"os"
|
||
"log"
|
||
"net/http"
|
||
"net/url"
|
||
"encoding/json"
|
||
"crypto/tls"
|
||
"time"
|
||
"strconv"
|
||
)
|
||
|
||
var userStates = make(map[int64]string)
|
||
var Proxy = make(map[int64]string)
|
||
|
||
type DataIP struct {
|
||
IP string `json:"query"`
|
||
Country string `json:"country"`
|
||
ISP string `json:"isp"`
|
||
}
|
||
|
||
func ProxyCheck(proxy string) (bool, string, string, string) {
|
||
proxyurl, err := url.Parse(proxy)
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
transport := &http.Transport{
|
||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||
Proxy: http.ProxyURL(proxyurl),
|
||
}
|
||
client := &http.Client{
|
||
Transport: transport,
|
||
Timeout: 20 * time.Second,
|
||
}
|
||
req, err := http.NewRequest("GET", "http://ip-api.com/json", nil)
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
resp, err := client.Do(req)
|
||
if err != nil {
|
||
return false, "Нет", "Нет", "Нет"
|
||
fmt.Println(err)
|
||
}
|
||
defer resp.Body.Close()
|
||
var data DataIP
|
||
err = json.NewDecoder(resp.Body).Decode(&data)
|
||
if err != nil {
|
||
fmt.Println(err)
|
||
}
|
||
return true, data.IP, data.Country, data.ISP
|
||
}
|
||
|
||
func main() {
|
||
err := godotenv.Load()
|
||
if err != nil {
|
||
log.Fatalf("%v\n", err)
|
||
}
|
||
tg := os.Getenv("TG_TOKEN")
|
||
bot, err := tgbotapi.NewBotAPI(tg)
|
||
if err != nil {
|
||
log.Fatalf("%v\n", err)
|
||
}
|
||
bot.Debug = true
|
||
u := tgbotapi.NewUpdate(0)
|
||
u.Timeout = 60
|
||
updates := bot.GetUpdatesChan(u)
|
||
for update := range updates {
|
||
if update.Message == nil { continue }
|
||
userID := update.Message.From.ID
|
||
if update.Message.IsCommand() {
|
||
if update.Message.Command() == "start" {
|
||
userStates[userID] = "wating"
|
||
bot.Send(tgbotapi.NewMessage(userID, "Введите прокси"))
|
||
}
|
||
continue
|
||
}
|
||
switch userStates[userID] {
|
||
case "wating":
|
||
prox := update.Message.Text
|
||
Proxy[userID] = prox
|
||
userStates[userID] = ""
|
||
status, ip, country, isp := ProxyCheck(Proxy[userID])
|
||
stat := strconv.FormatBool(status)
|
||
msg := "Работа прокси: " + stat + "\nIP: " + ip + "\nСтрана: " + country + "\nПровайдер: " + isp
|
||
bot.Send(tgbotapi.NewMessage(userID, msg))
|
||
}
|
||
}
|
||
}
|
||
|