From ff668a0ef7f9580d5cd02a8e8f02d35c0da9f71f Mon Sep 17 00:00:00 2001 From: wood chen Date: Fri, 20 Sep 2024 16:18:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E5=87=86=E7=82=B9?= =?UTF-8?q?=E6=92=AD=E6=8A=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service/binance/binance.go | 8 ++++---- service/binance/symbols.go | 25 ++++++++++--------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/service/binance/binance.go b/service/binance/binance.go index 1479606..e6ae635 100644 --- a/service/binance/binance.go +++ b/service/binance/binance.go @@ -76,7 +76,7 @@ func sendPriceUpdate() { message := fmt.Sprintf("市场更新 - %s (SGT)\n\n", now.Format("2006-01-02 15:04:05")) for _, symbol := range symbols { - info, err := getTickerInfo(symbol) // 直接使用完整的交易对名称 + info, err := getTickerInfo(symbol) if err != nil { log.Printf("Error getting ticker info for %s: %v", symbol, err) continue @@ -118,9 +118,9 @@ func RunBinance() { symbols = core.Symbols singaporeTZ = core.SingaporeTZ - // 初始化并加载交易对 - if err := LoadSymbols(); err != nil { - log.Fatalf("Failed to load trading pairs: %v", err) + // 初始化并加载所有交易对 + if err := LoadAllSymbols(); err != nil { + log.Fatalf("Failed to load all trading pairs: %v", err) } // 启动每小时刷新交易对缓存 diff --git a/service/binance/symbols.go b/service/binance/symbols.go index f9a3b0c..7fbe17f 100644 --- a/service/binance/symbols.go +++ b/service/binance/symbols.go @@ -13,11 +13,12 @@ import ( ) var ( - symbolsMu sync.RWMutex + symbolsMu sync.RWMutex + allSymbols []string ) // LoadSymbols 初始化并缓存所有交易对 -func LoadSymbols() error { +func LoadAllSymbols() error { client := binance.NewClient("", "") exchangeInfo, err := client.NewExchangeInfoService().Do(context.Background()) if err != nil { @@ -27,47 +28,41 @@ func LoadSymbols() error { symbolsMu.Lock() defer symbolsMu.Unlock() - symbols = nil // 清空旧的符号列表 + allSymbols = nil // 清空旧的符号列表 for _, symbol := range exchangeInfo.Symbols { if symbol.Status == "TRADING" && symbol.QuoteAsset == "USDT" { - symbols = append(symbols, symbol.Symbol) // 使用完整的交易对名称 + allSymbols = append(allSymbols, symbol.Symbol) } } - log.Printf("Loaded %d valid USDT trading pairs", len(symbols)) + log.Printf("Loaded %d valid USDT trading pairs", len(allSymbols)) return nil } -// GetAllSymbols 获取缓存的交易对列表 func GetAllSymbols() []string { symbolsMu.RLock() defer symbolsMu.RUnlock() - return symbols + return allSymbols } -// StartSymbolRefresh 每小时刷新一次交易对缓存 func StartSymbolRefresh(interval time.Duration) { ticker := time.NewTicker(interval) go func() { for range ticker.C { log.Println("Refreshing trading pairs...") - if err := LoadSymbols(); err != nil { + if err := LoadAllSymbols(); err != nil { log.Printf("Failed to refresh symbols: %v", err) } } }() } -// HandleSymbolQuery 处理虚拟币名查询 func HandleSymbolQuery(bot *tgbotapi.BotAPI, message *tgbotapi.Message) { - symbols := GetAllSymbols() + allSymbols := GetAllSymbols() msg := strings.TrimSpace(message.Text) - for _, symbol := range symbols { - // 移除USDT后缀 + for _, symbol := range allSymbols { coinName := strings.TrimSuffix(symbol, "USDT") - - // 不区分大小写的完全匹配检查 if strings.EqualFold(msg, coinName) { info, err := getTickerInfo(symbol) if err != nil {