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 { return "您可以使用 /ip ip地址 进行查找,支持ipv4/ipv6" } // 去除换行符 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)) } if _, ok := data["city"].(string); ok { msgs = append(msgs, "城市:"+data["city"].(string)) } 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 }