| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- 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
- }
|