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>
3.3 KiB
3.3 KiB
获取对话列表修复总结
问题描述
用户反馈"获取对话列表失败",点击聊天功能后无法加载对话列表。
根本原因
-
主要问题:
BaseClient.js中的getDialogs方法使用了硬编码的错误参数offsetPeer: "username"- 错误!应该是 InputPeer 对象- 其他参数也使用了不合理的默认值(如 43)
-
次要问题:
- MTProxy 代理配置问题
- 参数类型转换问题(字符串需要转换为数字)
- 缺少 getMessages 方法
修复内容
1. 修复 getDialogs 方法 (/backend/src/client/BaseClient.js)
// 修复前
async getDialogs(){
const result = await this.invoke(
new Api.messages.GetDialogs({
offsetDate: 43,
offsetId: 43,
offsetPeer: "username", // 错误!
limit: 100,
hash: 0,
excludePinned: true,
folderId: 43,
})
);
}
// 修复后
async getDialogs(options = {}){
try {
const params = {
offsetDate: Number(options.offsetDate) || 0,
offsetId: Number(options.offsetId) || 0,
offsetPeer: options.offsetPeer || new Api.InputPeerEmpty(),
limit: Number(options.limit) || 100,
hash: Number(options.hash) || 0,
excludePinned: Boolean(options.excludePinned) || false,
folderId: options.folderId ? Number(options.folderId) : undefined
};
// 移除 undefined 的参数
Object.keys(params).forEach(key => {
if (params[key] === undefined) {
delete params[key];
}
});
const result = await this.invoke(
new Api.messages.GetDialogs(params)
);
return result;
} catch (error) {
this.logger.error("getDialogs error: " + error.message);
throw error;
}
}
2. 修复代理配置问题 (/backend/src/client/ClientBus.js)
// 只有当代理有用户名和密码时才使用代理
if(proxyObj.username && proxyObj.password) {
tgClientParam.proxy={
useWSS: false,
ip:proxyObj.ip,
port:proxyObj.port,
username:proxyObj.username,
password:proxyObj.password,
socksType: 5,
timeout:10,
MTProxy: false,
};
} else {
this.logger.info("代理没有用户名密码,不使用代理连接");
}
3. 修复路由中的自动上线功能 (/backend/src/routers/TgAccountRouter.js)
- 添加了自动上线逻辑,当账号未连接时自动连接
- 修复了对话列表数据的解析逻辑
测试结果
从日志中可以看到:
- ✅ 成功连接到 Telegram
- ✅ 成功获取对话列表(12个对话)
- ✅ 自动上线功能正常工作
- ❌ getMessages 方法尚未实现(这是下一步需要添加的功能)
关键修复点
- offsetPeer 必须是 InputPeer 对象,不能是字符串
- 参数类型必须正确:数字参数不能传字符串
- 代理配置:当代理缺少认证信息时应该跳过代理
- 默认值要合理:使用 0 而不是随意的数字如 43
后续工作
- 实现 getMessages 方法以支持消息获取
- 实现 sendMessage 方法以支持发送消息
- 优化错误处理和用户提示