whatsapp-web.js开发WhatsApp Bot isMe判断指令无法执行问题
问题根因
你的代码存在2个直接导致功能失效的错误:
- 直接调用了未定义的
contact变量,代码运行到判断逻辑时会直接抛出引用错误,后续逻辑完全不会执行 - 混淆了
isMe属性的挂载对象:该属性属于消息发送者的Contact实例,不能直接凭空调用,也不属于Chat对象
修复后代码
client.on('message', async msg => { if (msg.body === '.pin') { // 先获取当前消息的发送者联系人实例 const contact = await msg.getContact(); // 校验发送者是否为当前登录的账号本人(所有者) if (contact.isMe) { const chat = await msg.getChat(); await chat.pin(); msg.reply('This *chat* has been pinned by *Owner*.'); console.log('[CHAT_PINNED] You were pinned Chat or Group!'); } else { msg.reply('仅所有者可执行该指令'); } } });
补充说明
- whatsapp-web.js中所有以
get开头的方法都是异步方法,必须使用await等待返回实例后,才能访问实例上的属性/方法,不能直接使用未声明的变量 contact.isMe返回布尔值:当对应联系人是当前客户端登录的账号本人时返回true,完全匹配你「仅所有者可执行指令」的权限控制需求- Chat对象对应单聊/群聊会话本身,不携带消息发送者的身份信息,不要在Chat对象上调用
isMe做权限判断
内容的提问来源于stack exchange,提问作者mukeenanyafiq
相关产品推荐
相关产品推荐

