mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 22:00:11 +08:00
优化代码结构
This commit is contained in:
parent
d41ae01f01
commit
5226548cec
@ -442,17 +442,12 @@ func loadConfig() {
|
|||||||
|
|
||||||
// 保存配置文件
|
// 保存配置文件
|
||||||
func jsonSave(v keyConfig, path string) {
|
func jsonSave(v keyConfig, path string) {
|
||||||
jsf, _ := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
jsf, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
|
||||||
defer func(file *os.File) {
|
|
||||||
err := file.Close()
|
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
}
|
|
||||||
}(jsf) // 结束时关闭句柄,释放资源
|
|
||||||
err := json.NewEncoder(jsf).Encode(v)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
return
|
||||||
}
|
}
|
||||||
|
defer jsf.Close()
|
||||||
|
_ = json.NewEncoder(jsf).Encode(v)
|
||||||
}
|
}
|
||||||
|
|
||||||
// JSON反序列化
|
// JSON反序列化
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
zero "github.com/wdvxdr1123/ZeroBot"
|
"github.com/RomiChan/syncx"
|
||||||
"github.com/wdvxdr1123/ZeroBot/message"
|
"github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"github.com/FloatTech/floatbox/web"
|
"github.com/FloatTech/floatbox/web"
|
||||||
)
|
)
|
||||||
@ -71,24 +71,22 @@ func getitemsorder(cnName string, onlyMaxRank bool) (od orders, it *itemsInSet,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查值是否为空,为空则重新获取
|
type wmdata struct {
|
||||||
func checknwm(ctx *zero.Ctx) bool {
|
wmitems map[string]items
|
||||||
var err error
|
itemNames []string
|
||||||
wmdr.Lock()
|
|
||||||
defer wmdr.Unlock()
|
|
||||||
if wd.wmitems == nil || wd.itemNames == nil {
|
|
||||||
wd, err = newwm()
|
|
||||||
if err != nil { // 获取失败
|
|
||||||
ctx.SendChain(message.Text("ERROR: 获取Warframe市场物品列表失败(" + err.Error() + ")"))
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
wderr error
|
||||||
|
wd = syncx.Lazy[*wmdata]{Init: func() (d *wmdata) {
|
||||||
|
d, wderr = newwm()
|
||||||
|
return
|
||||||
|
}}
|
||||||
|
)
|
||||||
|
|
||||||
func newwm() (*wmdata, error) {
|
func newwm() (*wmdata, error) {
|
||||||
var itemapi wfAPIItem // WarFrame市场的数据实例
|
var itemapi wfAPIItem // WarFrame市场的数据实例
|
||||||
var wd wmdata
|
var wd wmdata
|
||||||
println("正在获取Warframe市场物品列表")
|
|
||||||
data, err := web.RequestDataWithHeaders(&http.Client{}, wfitemurl, "GET", func(request *http.Request) error {
|
data, err := web.RequestDataWithHeaders(&http.Client{}, wfitemurl, "GET", func(request *http.Request) error {
|
||||||
request.Header.Add("Accept", "application/json")
|
request.Header.Add("Accept", "application/json")
|
||||||
request.Header.Add("Language", "zh-hans")
|
request.Header.Add("Language", "zh-hans")
|
||||||
@ -107,6 +105,6 @@ func newwm() (*wmdata, error) {
|
|||||||
wd.wmitems[v.ItemName] = v
|
wd.wmitems[v.ItemName] = v
|
||||||
wd.itemNames[i] = v.ItemName
|
wd.itemNames[i] = v.ItemName
|
||||||
}
|
}
|
||||||
println("获取Warframe市场物品列表完成")
|
logrus.Infoln("[wfapi] 获取", len(wd.itemNames), "项内容")
|
||||||
return &wd, nil
|
return &wd, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,26 +5,17 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
ctrl "github.com/FloatTech/zbpctrl"
|
ctrl "github.com/FloatTech/zbpctrl"
|
||||||
"github.com/FloatTech/zbputils/control"
|
"github.com/FloatTech/zbputils/control"
|
||||||
"github.com/FloatTech/zbputils/ctxext"
|
"github.com/FloatTech/zbputils/ctxext"
|
||||||
|
"github.com/RomiChan/syncx"
|
||||||
"github.com/lithammer/fuzzysearch/fuzzy"
|
"github.com/lithammer/fuzzysearch/fuzzy"
|
||||||
zero "github.com/wdvxdr1123/ZeroBot"
|
zero "github.com/wdvxdr1123/ZeroBot"
|
||||||
"github.com/wdvxdr1123/ZeroBot/message"
|
"github.com/wdvxdr1123/ZeroBot/message"
|
||||||
)
|
)
|
||||||
|
|
||||||
var wmdr sync.RWMutex
|
|
||||||
|
|
||||||
type wmdata struct {
|
|
||||||
wmitems map[string]items
|
|
||||||
itemNames []string
|
|
||||||
}
|
|
||||||
|
|
||||||
var wd, _ = newwm()
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
eng := control.Register("warframeapi", &ctrl.Options[*zero.Ctx]{
|
eng := control.Register("warframeapi", &ctrl.Options[*zero.Ctx]{
|
||||||
DisableOnDefault: false,
|
DisableOnDefault: false,
|
||||||
@ -242,12 +233,24 @@ func init() {
|
|||||||
ctx.SendChain(message.Text("已拉取服务器时间并同步到本地模拟"))
|
ctx.SendChain(message.Text("已拉取服务器时间并同步到本地模拟"))
|
||||||
})
|
})
|
||||||
// 根据名称从Warframe市场查询物品售价
|
// 根据名称从Warframe市场查询物品售价
|
||||||
eng.OnPrefix(".wm ", checknwm).SetBlock(true).
|
eng.OnPrefix(".wm ", func(ctx *zero.Ctx) bool {
|
||||||
|
if wd.Get().wmitems == nil || wd.Get().itemNames == nil {
|
||||||
|
if wderr != nil { // 获取失败
|
||||||
|
ctx.SendChain(message.Text("ERROR: 获取Warframe市场物品列表失败: ", wderr))
|
||||||
|
} else {
|
||||||
|
ctx.SendChain(message.Text("ERROR: Warframe市场物品列表为空!"))
|
||||||
|
}
|
||||||
|
wd = syncx.Lazy[*wmdata]{Init: func() (d *wmdata) {
|
||||||
|
d, wderr = newwm()
|
||||||
|
return
|
||||||
|
}}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}).SetBlock(true).
|
||||||
Handle(func(ctx *zero.Ctx) {
|
Handle(func(ctx *zero.Ctx) {
|
||||||
// 根据输入的名称, 从游戏物品名称列表中进行模糊搜索
|
// 根据输入的名称, 从游戏物品名称列表中进行模糊搜索
|
||||||
wmdr.RLock()
|
sol := fuzzy.FindNormalizedFold(ctx.State["args"].(string), wd.Get().itemNames)
|
||||||
sol := fuzzy.FindNormalizedFold(ctx.State["args"].(string), wd.itemNames)
|
|
||||||
wmdr.RUnlock()
|
|
||||||
// 物品名称
|
// 物品名称
|
||||||
var name string
|
var name string
|
||||||
|
|
||||||
@ -293,19 +296,17 @@ func init() {
|
|||||||
msgs = msgs[:0]
|
msgs = msgs[:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
sells, iteminfo, txt, err := getitemsorder(wd.wmitems[name].URLName, onlymaxrank)
|
sells, iteminfo, txt, err := getitemsorder(wd.Get().wmitems[name].URLName, onlymaxrank)
|
||||||
if !onlymaxrank {
|
if !onlymaxrank {
|
||||||
wmdr.RLock()
|
|
||||||
if iteminfo.ZhHans.WikiLink == "" {
|
if iteminfo.ZhHans.WikiLink == "" {
|
||||||
msgs = append(msgs, ctxext.FakeSenderForwardNode(ctx,
|
msgs = append(msgs, ctxext.FakeSenderForwardNode(ctx,
|
||||||
message.Image("https://warframe.market/static/assets/"+wd.wmitems[name].Thumb),
|
message.Image("https://warframe.market/static/assets/"+wd.Get().wmitems[name].Thumb),
|
||||||
message.Text("\n", wd.wmitems[name].ItemName)))
|
message.Text("\n", wd.Get().wmitems[name].ItemName)))
|
||||||
} else {
|
} else {
|
||||||
msgs = append(msgs, ctxext.FakeSenderForwardNode(ctx,
|
msgs = append(msgs, ctxext.FakeSenderForwardNode(ctx,
|
||||||
message.Image("https://warframe.market/static/assets/"+wd.wmitems[name].Thumb),
|
message.Image("https://warframe.market/static/assets/"+wd.Get().wmitems[name].Thumb),
|
||||||
message.Text("\n", wd.wmitems[name].ItemName, "\nwiki: ", iteminfo.ZhHans.WikiLink)))
|
message.Text("\n", wd.Get().wmitems[name].ItemName, "\nwiki: ", iteminfo.ZhHans.WikiLink)))
|
||||||
}
|
}
|
||||||
wmdr.RUnlock()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user