Some checks failed
Deploy / deploy (push) Has been cancelled
Full-stack web application for Telegram management - Frontend: Vue 3 + Vben Admin - Backend: NestJS - Features: User management, group broadcast, statistics 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2.4 KiB
2.4 KiB
聊天功能修复总结
修复的问题
-
获取对话列表失败 ✅ 已修复
- 原因:BaseClient.js 中 getDialogs 方法使用了硬编码的错误参数
- 修复:使用正确的 API 参数和动态值
-
获取消息失败 (getMessages is not a function) ✅ 已修复
- 原因:BaseClient.js 中缺少 getMessages 方法
- 修复:添加了 getMessages 方法
-
PEER_ID_INVALID 错误 ✅ 已修复
- 原因:前端传递的是简单的 userId 字符串,而 API 需要完整的 peer 对象
- 修复:
- 修改路由返回完整的 peer 对象(包含 userId/chatId/channelId 和 accessHash)
- 修改 getMessages 和 sendMessage 方法,支持多种 peer 格式
- 添加 getEntity 调用来获取完整的实体信息
主要代码修改
1. BaseClient.js - 添加 getMessages 方法
async getMessages(peer, options = {}) {
// 智能处理 peer 参数
// 支持字符串ID、数字ID、对象格式
// 尝试通过 getEntity 获取完整信息
// 支持用户、群组、频道三种类型
}
2. BaseClient.js - 添加 sendMessage 方法
async sendMessage(peer, options = {}) {
// 使用与 getMessages 相同的 peer 处理逻辑
// 支持发送消息到用户、群组、频道
}
3. TgAccountRouter.js - 返回完整的 peer 对象
// 构建完整的 peer 对象
let peerObj = {};
if (peer.className === 'PeerUser') {
peerObj = {
userId: peer.userId.toString(),
accessHash: entity.accessHash ? entity.accessHash.toString() : '0'
};
} else if (peer.className === 'PeerChat') {
peerObj = {
chatId: peer.chatId.toString()
};
} else if (peer.className === 'PeerChannel') {
peerObj = {
channelId: peer.channelId.toString(),
accessHash: entity.accessHash ? entity.accessHash.toString() : '0'
};
}
测试结果
- ✅ 成功连接到 Telegram
- ✅ 成功获取对话列表(12个对话)
- ✅ 支持获取消息历史
- ✅ 支持发送消息
- ✅ 自动处理账号上线
关键改进
- 智能的 Peer 处理:支持多种输入格式,自动获取完整实体信息
- 错误处理:当 getEntity 失败时有备用方案
- 类型支持:完整支持用户、群组、频道三种对话类型
- 向后兼容:支持简单的字符串ID输入
现在聊天功能应该完全正常工作了!