使用NodeJS Telegraf包检测Telegram用户频道状态返回异常求助
解决Telegraf机器人检测频道成员状态始终返回"left"的问题
以下是几个排查和解决的关键点:
确认频道标识的正确性
不要直接使用@dji_fly_app_hebrew作为频道参数,先通过ctx.telegram.getChat("@dji_fly_app_hebrew")获取频道的数字ID,再用这个ID替代用户名传入getChatMember。部分情况下,用户名可能因频道设置(如曾修改过用户名)导致识别异常,数字ID的稳定性更高。验证机器人的频道身份与权限
手动确认以下两点:- 机器人确实是目标频道的成员(包括管理员身份)
- 若频道为私有,需确保管理员权限中开启了查看成员相关权限
检查用户ID的准确性
打印ctx.message.from.id确认用户ID是否正确,避免因消息上下文错误(比如在群组触发时误拿其他用户ID)导致查询对象出错。另外,若用户是频道的匿名管理员,getChatMember可能无法正确识别其状态,需特殊处理。确保异步代码正确执行
确认调用getChatMember的代码处于async函数内部,否则await不会生效,可能导致获取到未解析的Promise对象,进而出现异常状态值。
示例修正后的代码:
// 先获取频道数字ID const channel = await ctx.telegram.getChat("@dji_fly_app_hebrew"); // 使用频道ID查询成员状态 const memberStatus = await ctx.telegram.getChatMember(channel.id, ctx.message.from.id); console.log(memberStatus.status);
内容的提问来源于stack exchange,提问作者orielhaim
相关产品推荐
相关产品推荐

