tribally report logic

This commit is contained in:
2025-05-08 10:27:30 +08:00
parent 5cbce1e3c9
commit b002ae3ad2
4 changed files with 127 additions and 11 deletions

View File

@@ -1,6 +1,7 @@
package tribally
import (
"bytes"
"encoding/json"
"errors"
"fmt"
@@ -8,6 +9,7 @@ import (
"io"
"net/http"
"strings"
"time"
)
func BindTribally(apiKey, userId string) (string, error) {
@@ -92,3 +94,61 @@ func VerifyTribally(token string) error {
return nil
}
type UserChapter struct {
Email string `json:"email"`
Chapter int `json:"chapter"`
}
func PostUserChapter(apiKey string, chapters ...UserChapter) error {
var players []map[string]any
for _, c := range chapters {
players = append(players, map[string]any{
"playerId": c.Email,
"isWinner": true,
"chapter": c.Chapter,
})
}
arg := map[string]any{
"activityId": "abc1234",
"gameStartedAt": time.Now().Format(time.DateTime),
"players": players,
}
body, err := json.Marshal(arg)
if err != nil {
return err
}
url := "https://api.tribally.games/activity/create"
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(body))
if err != nil {
return err
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("x-api-key", apiKey)
res, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
return errors.New(res.Status)
}
result := struct {
Error string `json:"error"`
Code string `json:"code"`
}{}
data, _ := io.ReadAll(res.Body)
fmt.Println(string(data))
return nil
err = json.NewDecoder(res.Body).Decode(&result)
if err != nil {
return err
}
if result.Error != "" {
return fmt.Errorf("error: %s, code: %s", result.Error, result.Code)
}
return nil
}

View File

@@ -0,0 +1,25 @@
package tribally
import (
"fmt"
"github.com/stretchr/testify/require"
"testing"
)
const (
apiKey = "088847b7172bdffa1eb564a581bcf903"
)
func TestBindTribally(t *testing.T) {
url, err := BindTribally(apiKey, "lhj168os@gmail.com")
require.Nil(t, err)
fmt.Println(url)
}
func TestPostUserChapter(t *testing.T) {
err := PostUserChapter(apiKey, UserChapter{
Email: "lhj168os@gmail.com",
Chapter: 3,
})
require.Nil(t, err)
}