go-bot/workers/ip.go

113 lines
2.6 KiB
Go
Raw Normal View History

2024-04-14 21:41:50 +08:00
package workers
import (
"fmt"
"go-bot/config"
2024-04-15 14:51:24 +08:00
"net"
"slices"
2024-04-14 21:41:50 +08:00
"strings"
2024-04-18 19:36:32 +08:00
"time"
2024-04-14 21:41:50 +08:00
"github.com/imroc/req/v3"
2024-04-14 21:41:50 +08:00
)
func init() {
plugins := config.GetConfig()["PLUGINS"].([]interface{})
if slices.Contains(plugins, "ip") {
RegisterWorkerFactory("ip", func(parms []string, uid, gid, role, mid, rawMsg string) Worker {
return &Ip{
StdAns: NewStdAns(parms, uid, gid, role, mid, rawMsg),
}
})
}
}
2024-04-14 21:41:50 +08:00
type Ip struct {
*StdAns
}
func (a *Ip) GetMsg() string {
if len(a.Parms) < 2 {
2024-04-15 14:51:24 +08:00
return "您可以使用 /ip ip地址/网址 进行查找ip地址支持ipv4/ipv6"
2024-04-14 21:41:50 +08:00
}
// 去除换行符
raw_msg := strings.TrimRight(a.RawMsg, "\n")
// fmt.Println("raw_msg:", raw_msg)
2024-04-14 22:08:50 +08:00
parms := strings.Fields(raw_msg)
client := req.C().SetTimeout(5 * time.Second)
2024-04-15 14:51:24 +08:00
var ip string
if net.ParseIP(parms[1]) != nil {
ip = parms[1]
} else {
url := "https://api.siterelic.com/ping"
data := map[string]string{
"url": parms[1],
}
var resp_data map[string]interface{}
_, err := client.R().
SetSuccessResult(&resp_data).
SetBodyJsonMarshal(data).
SetHeader("Content-Type", "application/json").
SetHeader("x-api-key", "d84eae04-0654-4173-bc6a-c457c4fc3f4d").
Post(url)
2024-04-15 14:51:24 +08:00
if err != nil {
return "DNS解析失败"
}
if resp_data["data"] != nil {
ip = resp_data["data"].(map[string]interface{})["ip"].(string)
// print("ip: ", ip)
2024-04-15 14:51:24 +08:00
}
2024-04-15 14:51:24 +08:00
}
url := "https://api.ip.sb/geoip/" + ip
fmt.Println("url: ", url)
var data map[string]interface{}
resp, err := client.R().
SetSuccessResult(&data).
SetHeader("User-Agent", "Mozilla/5.0").
Get(url)
2024-04-14 21:41:50 +08:00
if err != nil {
return "ip查询失败"
}
defer resp.Body.Close()
// fmt.Println("body: ", string(body))
// 输出响应数据
2024-04-14 22:08:50 +08:00
fmt.Println("data: ", data)
2024-04-14 21:41:50 +08:00
if _, ok := data["code"].(float64); ok {
code := data["code"].(float64)
if code == 401 {
return "ip查询失败"
}
}
var msgs []string
if _, ok := data["organization"].(string); ok {
msgs = append(msgs, "组织:"+data["organization"].(string))
}
2024-04-14 21:44:57 +08:00
if _, ok := data["city"].(string); ok {
msgs = append(msgs, "城市:"+data["city"].(string))
}
2024-04-14 21:41:50 +08:00
if _, ok := data["isp"].(string); ok {
msgs = append(msgs, "ISP"+data["isp"].(string))
}
if _, ok := data["asn"].(string); ok {
msgs = append(msgs, "ASN"+data["asn"].(string))
}
if _, ok := data["asn_organization"].(string); ok {
msgs = append(msgs, "ASN组织"+data["asn_organization"].(string))
}
if _, ok := data["country"].(string); ok {
msgs = append(msgs, "国家:"+data["country"].(string))
}
msgs = append(msgs, "IP"+data["ip"].(string))
msg := strings.Join(msgs, "\n")
return msg
}