package telegram import ( "app/commons/core" "encoding/json" "fmt" tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" "io" "net/http" "strings" ) // handleCallbackQuery 处理回调查询 func handleCallbackQuery(callback *tgbotapi.CallbackQuery) { data := callback.Data // 处理抢红包 if strings.HasPrefix(data, "grab_") { packetNo := strings.TrimPrefix(data, "grab_") grabRedPacket(callback, packetNo) return } // 其他回调 answerCallback(callback.ID, "未知操作") } // grabRedPacket 抢红包 func grabRedPacket(callback *tgbotapi.CallbackQuery, packetNo string) { // TODO: 检查用户是否已绑定 // TODO: 调用 API 抢红包 // 临时实现 userID := callback.From.ID username := callback.From.UserName // 模拟调用 API success, amount, message := callGrabRedPacketAPI(packetNo, userID, username) if success { // 抢到红包 answerCallback(callback.ID, fmt.Sprintf("🎉 恭喜抢到 %.2f VND!", amount)) // 更新原消息 editText := fmt.Sprintf("%s\n\n✅ @%s 抢到了 %.2f VND", callback.Message.Text, username, amount) editMessage(callback.Message.Chat.ID, callback.Message.MessageID, editText) } else { // 抢红包失败 answerCallback(callback.ID, message) } core.Log.Infof("抢红包 - 用户: %s, 红包: %s, 结果: %s", username, packetNo, message) } // callGrabRedPacketAPI 调用抢红包 API(模拟) func callGrabRedPacketAPI(packetNo string, telegramID int64, username string) (bool, float64, string) { // TODO: 实现真实的 API 调用 // 这里是模拟实现 apiURL := "http://localhost:2001/api/v1/redpacket/grab" payload := map[string]interface{}{ "packetNo": packetNo, "telegramId": telegramID, "telegramUsername": username, } jsonData, _ := json.Marshal(payload) req, err := http.NewRequest("POST", apiURL, strings.NewReader(string(jsonData))) if err != nil { return false, 0, "系统错误" } req.Header.Set("Content-Type", "application/json") // TODO: 添加 JWT Token // req.Header.Set("Authorization", "Bearer "+token) client := &http.Client{} resp, err := client.Do(req) if err != nil { return false, 0, "网络错误" } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) var result map[string]interface{} json.Unmarshal(body, &result) if resp.StatusCode == 200 { data := result["data"].(map[string]interface{}) amount := data["amount"].(float64) return true, amount, "抢红包成功" } message := result["message"].(string) return false, 0, message }