go-bot/workers/ip.go

87 lines
1.9 KiB
Go
Raw Normal View History

2024-04-14 21:41:50 +08:00
package workers
import (
"fmt"
"io"
"net/http"
"strings"
"github.com/goccy/go-json"
)
type Ip struct {
*StdAns
}
func (a *Ip) GetMsg() string {
if len(a.Parms) < 2 {
2024-04-14 21:44:57 +08:00
return "您可以使用 /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)
parms := strings.Split(raw_msg, " ")
url := "https://api.ip.sb/geoip/" + parms[1]
// fmt.Println("url: ", url)
req, err := http.NewRequest("GET", url, nil)
if err != nil {
fmt.Println("创建请求失败:", err)
}
req.Header.Set("User-Agent", "Mozilla/5.0")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "ip查询失败"
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return "ip查询失败"
}
// fmt.Println("body: ", string(body))
var data map[string]interface{}
err = json.Unmarshal(body, &data)
if err != nil {
fmt.Println("data: ", data)
return err.Error()
}
// 输出响应数据
// fmt.Println("data: ", data)
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
}