mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2026-02-06 15:20:22 +00:00
feat(all): update to go1.24+
This commit is contained in:
144
plugin/ygotrade/ygotrade.go
Normal file
144
plugin/ygotrade/ygotrade.go
Normal file
@@ -0,0 +1,144 @@
|
||||
// Package ygotrade 游戏王卡价查询插件
|
||||
package ygotrade
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/FloatTech/floatbox/web"
|
||||
ctrl "github.com/FloatTech/zbpctrl"
|
||||
"github.com/FloatTech/zbputils/control"
|
||||
"github.com/FloatTech/zbputils/ctxext"
|
||||
zero "github.com/wdvxdr1123/ZeroBot"
|
||||
"github.com/wdvxdr1123/ZeroBot/message"
|
||||
)
|
||||
|
||||
const (
|
||||
rarityTrade = "https://api.jihuanshe.com/api/market/search/match-product?game_key=ygo&game_sub_key=ocg&page=1&keyword="
|
||||
storeTrade = "https://api.jihuanshe.com/api/market/card-versions/products?game_key=ygo&game_sub_key=ocg&page=1&condition=1&card_version_id="
|
||||
)
|
||||
|
||||
type apiInfo struct {
|
||||
Data []tradeInfo `json:"data"`
|
||||
}
|
||||
|
||||
type tradeInfo struct {
|
||||
// 卡片信息
|
||||
ID int `json:"id"`
|
||||
NameCn string `json:"name_cn"`
|
||||
CardID int `json:"card_id"`
|
||||
Number string `json:"number"`
|
||||
Rarity string `json:"rarity"`
|
||||
ImageURL string `json:"image_url"`
|
||||
MinPrice string `json:"min_price"`
|
||||
// 卡店信息
|
||||
SellerUserID int `json:"seller_user_id"`
|
||||
SellerUsername string `json:"seller_username"`
|
||||
SellerUserAvatar string `json:"seller_user_avatar"`
|
||||
SellerProvince string `json:"seller_province"`
|
||||
SellerCity string `json:"seller_city"`
|
||||
SellerCreditRank string `json:"seller_credit_rank"`
|
||||
Quantity string `json:"quantity"`
|
||||
CardVersionImage string `json:"card_version_image"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
engine := control.AutoRegister(&ctrl.Options[*zero.Ctx]{
|
||||
DisableOnDefault: false,
|
||||
Brief: "游戏王卡价查询", // 本插件基于集换社API
|
||||
Help: "- 查卡价 [卡名]\n- 查卡价 [卡名] -r [稀有度 稀有度 ...]\n- 查卡店 [卡名]\n- 查卡店 [卡名] -r [稀有度]",
|
||||
}).ApplySingle(ctxext.DefaultSingle)
|
||||
engine.OnPrefix("查卡价", func(ctx *zero.Ctx) bool {
|
||||
ctx.State["args"] = strings.TrimSpace(ctx.State["args"].(string))
|
||||
return ctx.State["args"].(string) != ""
|
||||
}).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
cardName, rarity, _ := strings.Cut(ctx.State["args"].(string), " -r ")
|
||||
listOfTrace, err := getRarityTrade(cardName, rarity)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
msg := make(message.Message, len(listOfTrace))
|
||||
for i := 0; i < len(listOfTrace); i++ {
|
||||
msg[i] = ctxext.FakeSenderForwardNode(ctx, message.Text(
|
||||
"卡名:", listOfTrace[i].NameCn,
|
||||
"\nID:", listOfTrace[i].ID,
|
||||
"\n卡序:", listOfTrace[i].Number,
|
||||
"\n罕贵度:", listOfTrace[i].Rarity,
|
||||
"\n当前最低价:", listOfTrace[i].MinPrice),
|
||||
message.Image(listOfTrace[i].ImageURL))
|
||||
}
|
||||
if id := ctx.Send(msg); id.ID() == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
})
|
||||
engine.OnPrefix("查卡店", func(ctx *zero.Ctx) bool {
|
||||
ctx.State["args"] = strings.TrimSpace(ctx.State["args"].(string))
|
||||
return ctx.State["args"].(string) != ""
|
||||
}).SetBlock(true).Handle(func(ctx *zero.Ctx) {
|
||||
cardName, rarity, _ := strings.Cut(ctx.State["args"].(string), " -r ")
|
||||
if strings.Count(rarity, " ") > 0 {
|
||||
ctx.SendChain(message.Text("ERROR: ", "卡店查询不支持查找多个罕贵度"))
|
||||
return
|
||||
}
|
||||
listOfTrace, err := getRarityTrade(cardName, rarity)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
listStroe, err := getStoreTrade(listOfTrace[0].ID)
|
||||
if err != nil {
|
||||
ctx.SendChain(message.Text("ERROR: ", err))
|
||||
return
|
||||
}
|
||||
msg := make(message.Message, len(listStroe))
|
||||
for i := 0; i < len(listStroe); i++ {
|
||||
msg[i] = ctxext.FakeSenderForwardNode(ctx, message.Text(
|
||||
"卖家名:", listStroe[i].SellerUsername,
|
||||
"\nID:", listStroe[i].SellerUserID,
|
||||
"\n地区:", listStroe[i].SellerCity,
|
||||
"\n信誉度:", listStroe[i].SellerCreditRank,
|
||||
"\n数量:", listStroe[i].Quantity,
|
||||
"\n当前最低价:", listStroe[i].MinPrice),
|
||||
message.Image(listStroe[i].CardVersionImage))
|
||||
}
|
||||
if id := ctx.Send(msg); id.ID() == 0 {
|
||||
ctx.SendChain(message.Text("ERROR: 可能被风控了"))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取卡名该罕贵度卡片数据
|
||||
func getRarityTrade(key, rarity string) (tradeInfo []tradeInfo, err error) {
|
||||
listOfTrace, err := web.GetData(rarityTrade + url.QueryEscape(key) + "&rarity=" + url.QueryEscape(rarity))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var apiInfo apiInfo
|
||||
err = json.Unmarshal(listOfTrace, &apiInfo)
|
||||
if len(apiInfo.Data) == 0 {
|
||||
err = errors.New("没有找到相关卡片或输入参数错误")
|
||||
return
|
||||
}
|
||||
tradeInfo = apiInfo.Data
|
||||
return
|
||||
}
|
||||
|
||||
// 获取卡店卡片数据
|
||||
func getStoreTrade(cardID int) (stroeInfo []tradeInfo, err error) {
|
||||
listOfTrace, err := web.GetData(storeTrade + url.QueryEscape(strconv.Itoa(cardID)))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var apiInfo apiInfo
|
||||
err = json.Unmarshal(listOfTrace, &apiInfo)
|
||||
if len(apiInfo.Data) == 0 {
|
||||
err = errors.New("没有找到相关卡片或输入参数错误")
|
||||
return
|
||||
}
|
||||
stroeInfo = apiInfo.Data
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user