MadelineProto调用getFullUser报内部对等数据库无对应peer错误如何修复
MadelineProto内部对等数据库运作逻辑
MadelineProto的内部peer数据库是本地维护的轻量缓存,存储所有当前账号接触过的用户、群组、频道的ID、访问哈希、类型映射关系,不会在实例启动时自动拉取全平台的对等数据:
- 只有账号和对应对等端产生过消息交互、主动调用过解析接口、或者完成初始化登录拉取自身账号信息时,对应peer的记录才会被写入数据库
- 传入未被收录的peer标识(包括无效用户名、未解析的纯数字ID、格式错误的peer参数)时,就会触发
This peer is not present in the internal peer database报错,哪怕传入的是自身有效ID,只要没完成初始缓存、或者参数格式错误,一样会触发该报错。
可直接落地的修复方法
- 拉取自身账号信息时优先使用内置标识:不需要提前做peer解析,直接传
'self'作为id参数即可,这是官方推荐的自身信息调用方式,完全绕过peer缓存校验:
$selfInfo = $MadelineProto->users->getFullUser(['id' => 'self']);
- 通过数字ID查询任意用户信息前,先主动触发peer解析:传入整数类型的目标ID(不要给数字加引号转成字符串,否则会被识别为用户名走无效解析逻辑)调用解析接口,等peer记录写入数据库后再执行查询:
// 传入整数类型的用户ID,自动完成peer信息拉取和本地缓存 $MadelineProto->getPwrChat(123456789); // 解析完成后再调用查询接口即可正常返回结果 $userInfo = $MadelineProto->users->getFullUser(['id' => 123456789]);
- 排查初始化流程问题:如果传
'self'依然报错,检查是否在$MadelineProto->start()方法执行完成(即账号登录、初始信息同步全部完成)之前就调用了查询接口——未完成初始化时,自身账号的peer记录还没写入本地数据库,必然触发报错。
注意:不要使用user#xxxxxx这类自定义拼接的参数格式,MadelineProto不识别该格式的传值,会直接判定为无效peer。
内容的提问来源于stack exchange,提问作者Валерий А.
相关产品推荐
相关产品推荐

