Skip to content

Commit 20b508e

Browse files
committed
fix: 修正文档示例 - 统一使用 leaderboardId 和对象参数格式
1 parent 776ebc6 commit 20b508e

5 files changed

Lines changed: 249 additions & 22 deletions

File tree

AI-CODE-ISSUES.md

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
# AI 生成代码问题分析
2+
3+
## AI 生成的代码中的问题
4+
5+
### ❌ 问题 1: 使用了错误的字段名 `leaderboardName`
6+
7+
**错误代码:**
8+
```javascript
9+
await this.tapManager.submitScores([{
10+
leaderboardName: this.leaderboardName, // ❌ 错误
11+
score: score,
12+
extraInfo: JSON.stringify({...})
13+
}])
14+
```
15+
16+
**正确代码:**
17+
```javascript
18+
await leaderboardManager.submitScores({
19+
scores: [{
20+
leaderboardId: "your_leaderboard_id", // ✅ 正确,使用 leaderboardId
21+
score: 1000
22+
}]
23+
})
24+
```
25+
26+
**或者使用 Promise 版本(不传 callback):**
27+
```javascript
28+
const result = await leaderboardManager.submitScores({
29+
scores: [{
30+
leaderboardId: "your_leaderboard_id",
31+
score: 1000
32+
}]
33+
})
34+
```
35+
36+
### ❌ 问题 2: 参数格式不正确
37+
38+
**错误:** AI 直接传数组,没有包装在对象中
39+
40+
**正确格式:**
41+
```javascript
42+
// 方式1: 使用回调
43+
leaderboardManager.submitScores({
44+
scores: [...], // scores 数组
45+
callback: {...} // 回调对象
46+
})
47+
48+
// 方式2: 使用 Promise(不传 callback)
49+
const result = await leaderboardManager.submitScores({
50+
scores: [...] // scores 数组
51+
})
52+
```
53+
54+
### ❌ 问题 3: API 参数不完整
55+
56+
**AI 生成的代码缺少参数:**
57+
```javascript
58+
// ❌ loadCurrentPlayerLeaderboardScore 缺少参数
59+
const playerScore = await this.tapManager.loadCurrentPlayerLeaderboardScore(this.leaderboardName)
60+
61+
// ✅ 正确的调用
62+
const result = await leaderboardManager.loadCurrentPlayerLeaderboardScore({
63+
leaderboardId: "your_leaderboard_id",
64+
collection: "public" // 可选
65+
})
66+
```
67+
68+
### ✅ 正确:使用 await
69+
70+
**AI 使用 await 是正确的!**
71+
- TapTap API 支持两种模式:
72+
- 传递 callback → 回调模式
73+
- 不传 callback → Promise 模式(可以用 await)
74+
75+
## 文档中的不一致
76+
77+
### 问题:文档示例不统一
78+
79+
**leaderboardDocs.ts 中的问题:**
80+
81+
1. **第 348 行** - 使用了 `leaderboardName`(错误)
82+
```javascript
83+
await leaderboardManager.submitScores([{
84+
leaderboardName: 'daily_ranking', // ❌ 应该是 leaderboardId
85+
score: finalScore
86+
}])
87+
```
88+
89+
2. **第 557 行** - 同样的问题
90+
```javascript
91+
await leaderboardManager.submitScores([{
92+
leaderboardName: 'my_leaderboard', // ❌ 应该是 leaderboardId
93+
score: 1000
94+
}])
95+
```
96+
97+
3. **第 562、566 行** - 缺少参数对象包装
98+
```javascript
99+
// ❌ 错误:直接传字符串
100+
await leaderboardManager.loadCurrentPlayerLeaderboardScore('my_leaderboard')
101+
leaderboardManager.openLeaderboard()
102+
103+
// ✅ 正确:应该传对象
104+
await leaderboardManager.loadCurrentPlayerLeaderboardScore({
105+
leaderboardId: 'my_leaderboard'
106+
})
107+
leaderboardManager.openLeaderboard({
108+
leaderboardId: 'my_leaderboard'
109+
})
110+
```
111+
112+
## 需要修复的文档位置
113+
114+
### 1. submitScores 示例(第 124-165 行)
115+
116+
**当前:** 正确使用了 `leaderboardId` 和对象格式 ✅
117+
118+
### 2. common_scenarios 中的 submitScores(第 348 行)
119+
120+
**当前:** 使用了错误的 `leaderboardName`
121+
122+
**需要改为:**
123+
```javascript
124+
const result = await leaderboardManager.submitScores({
125+
scores: [{
126+
leaderboardId: 'daily_ranking',
127+
score: finalScore,
128+
extraInfo: JSON.stringify({
129+
timestamp: Date.now(),
130+
gameMode: 'classic'
131+
})
132+
}]
133+
})
134+
```
135+
136+
### 3. Quick Start 示例(第 557-566 行)
137+
138+
**当前:** 使用了错误的字段名和参数格式 ❌
139+
140+
**需要改为:**
141+
```javascript
142+
// 1. Get manager
143+
const leaderboardManager = tap.getLeaderboardManager();
144+
145+
// 2. Submit score
146+
await leaderboardManager.submitScores({
147+
scores: [{
148+
leaderboardId: 'my_leaderboard',
149+
score: 1000
150+
}]
151+
});
152+
153+
// 3. Query current player's rank
154+
const playerScore = await leaderboardManager.loadCurrentPlayerLeaderboardScore({
155+
leaderboardId: 'my_leaderboard'
156+
});
157+
console.log('Your rank:', playerScore.rank);
158+
159+
// 4. Open leaderboard UI
160+
leaderboardManager.openLeaderboard({
161+
leaderboardId: 'my_leaderboard'
162+
});
163+
```
164+
165+
## 优化建议
166+
167+
### 1. 统一文档示例
168+
169+
所有示例都应该:
170+
- ✅ 使用 `leaderboardId`(不是 leaderboardName)
171+
- ✅ 使用对象参数格式 `{ leaderboardId: "...", ... }`
172+
- ✅ 可以使用 `await`(Promise 模式)
173+
- ✅ 或使用 callback(回调模式)
174+
- ✅ 两种模式都提供示例
175+
176+
### 2. 添加注意事项
177+
178+
在每个 API 文档中添加:
179+
```
180+
⚠️ IMPORTANT:
181+
- Use leaderboardId (not leaderboardName)
182+
- Wrap all parameters in an object
183+
- Can use await (returns Promise) or provide callback
184+
```
185+
186+
### 3. 添加完整的类示例
187+
188+
提供一个正确的 LeaderboardManager 封装类示例,作为参考实现。
189+
190+
## 为什么 AI 会生成错误代码?
191+
192+
1. **文档不一致** - 有些示例用 `leaderboardName`,有些用 `leaderboardId`
193+
2. **参数格式混乱** - 有些示例直接传字符串,有些传对象
194+
3. **缺少明确说明** - 没有明确强调 leaderboardId vs leaderboardName
195+
4. **示例过于复杂** - AI 可能混淆了不同示例的写法

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.0.12] - 2025-10-10
9+
10+
### Fixed
11+
- 📝 **Fix documentation inconsistencies** - Corrected code examples to prevent AI confusion
12+
- Fixed: Use `leaderboardId` (not `leaderboardName`) consistently
13+
- Fixed: All API calls must use object parameters, not direct strings
14+
- Fixed: submitScores must wrap scores in `{ scores: [...] }` object
15+
- Fixed: loadCurrentPlayerLeaderboardScore takes `{ leaderboardId, collection }` object
16+
- Fixed: loadPlayerCenteredScores takes `{ leaderboardId, before, after }` object
17+
- Fixed: openLeaderboard takes `{ leaderboardId, collection }` object
18+
- Added warning in Quick Start section about correct parameter format
19+
- Prevents AI agents from generating incorrect code with wrong field names
20+
821
## [1.0.11] - 2025-10-10
922

1023
### Fixed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@mikoto_zero/minigame-open-mcp",
3-
"version": "1.0.11",
3+
"version": "1.0.12",
44
"type": "module",
55
"description": "TapTap Minigame Open API MCP Server - Documentation and Management APIs for TapTap minigame (Leaderboard, and more features coming)",
66
"main": "dist/server.js",

src/data/leaderboardDocs.ts

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -344,14 +344,14 @@ const leaderboardManager = tap.getLeaderboardManager();
344344
// 1. After game ends, submit score
345345
async function submitGameScore(finalScore) {
346346
try {
347-
await leaderboardManager.submitScores([{
348-
leaderboardName: 'daily_ranking',
349-
score: finalScore,
350-
extraInfo: JSON.stringify({
351-
timestamp: Date.now(),
352-
gameMode: 'classic'
353-
})
354-
}]);
347+
// Use leaderboardId (not leaderboardName!)
348+
// Wrap in scores array within an object
349+
await leaderboardManager.submitScores({
350+
scores: [{
351+
leaderboardId: 'daily_ranking', // Use leaderboardId
352+
score: finalScore
353+
}]
354+
});
355355
console.log('Score submitted!');
356356
return true;
357357
} catch (error) {
@@ -363,7 +363,11 @@ async function submitGameScore(finalScore) {
363363
// 2. Show player's ranking after submission
364364
async function showPlayerRanking() {
365365
try {
366-
const playerScore = await leaderboardManager.loadCurrentPlayerLeaderboardScore('daily_ranking');
366+
// Use object parameter with leaderboardId
367+
const playerScore = await leaderboardManager.loadCurrentPlayerLeaderboardScore({
368+
leaderboardId: 'daily_ranking',
369+
collection: 'public'
370+
});
367371
368372
// Display ranking to player
369373
showMessage(\`Your rank: #\${playerScore.rank}\`);
@@ -381,7 +385,9 @@ async function showPlayerRanking() {
381385
// 3. Display nearby competitors
382386
async function showNearbyPlayers() {
383387
try {
384-
const nearby = await leaderboardManager.loadPlayerCenteredScores('daily_ranking', {
388+
// Use object parameter with leaderboardId
389+
const nearby = await leaderboardManager.loadPlayerCenteredScores({
390+
leaderboardId: 'daily_ranking',
385391
before: 3,
386392
after: 3
387393
});
@@ -395,7 +401,11 @@ async function showNearbyPlayers() {
395401
396402
// 4. Open full leaderboard when player clicks "View All"
397403
function openFullLeaderboard() {
398-
leaderboardManager.openLeaderboard();
404+
// Use object parameter with leaderboardId
405+
leaderboardManager.openLeaderboard({
406+
leaderboardId: 'daily_ranking',
407+
collection: 'public'
408+
});
399409
}
400410
401411
// Complete flow
@@ -548,22 +558,31 @@ Available methods: ${cat.apis.map(api => `\`${api.name}\``).join(', ')}
548558
549559
## Quick Start
550560
561+
⚠️ **CRITICAL: Use leaderboardId (NOT leaderboardName) and wrap parameters in objects!**
562+
551563
\`\`\`javascript
552564
// 1. Get LeaderboardManager instance
553565
const leaderboardManager = tap.getLeaderboardManager();
554566
555-
// 2. Submit a score
556-
await leaderboardManager.submitScores([{
557-
leaderboardName: 'my_leaderboard',
558-
score: 1000
559-
}]);
567+
// 2. Submit a score (use leaderboardId and wrap in scores array)
568+
await leaderboardManager.submitScores({
569+
scores: [{
570+
leaderboardId: 'my_leaderboard', // Use leaderboardId (not leaderboardName)
571+
score: 1000
572+
}]
573+
});
560574
561-
// 3. Query current player's rank
562-
const playerScore = await leaderboardManager.loadCurrentPlayerLeaderboardScore('my_leaderboard');
575+
// 3. Query current player's rank (use object parameter)
576+
const playerScore = await leaderboardManager.loadCurrentPlayerLeaderboardScore({
577+
leaderboardId: 'my_leaderboard',
578+
collection: 'public'
579+
});
563580
console.log('Your rank:', playerScore.rank);
564581
565-
// 4. Open leaderboard UI
566-
leaderboardManager.openLeaderboard();
582+
// 4. Open leaderboard UI (use object parameter)
583+
leaderboardManager.openLeaderboard({
584+
leaderboardId: 'my_leaderboard'
585+
});
567586
\`\`\`
568587
`;
569588
}

src/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class TapTapMinigameMCPServer {
5151
this.server = new Server(
5252
{
5353
name: 'taptap-minigame-mcp',
54-
version: '1.0.11',
54+
version: '1.0.12',
5555
}
5656
);
5757

0 commit comments

Comments
 (0)