wechaty/wechaty-puppet-padchat

room.del无法删除非好友的联系人

lh4111 opened this issue · 3 comments

重要:请不要删除模板自行填写,所有不按照模板填写的issue,我们将不会处理。

0. 发 Issue 指南

  1. 请运行下面的命令,看问题是否可以被解决:
rm -rf package-lock.json
rm -rf node_modules
npm install
  1. 请在 FAQ 清单 看是否已有解决办法。

  2. 请先在issue 中搜关键信息,确认你要发的内容和之前的issue 不重复。

1. 提供你的包版本信息

  • wechaty 版本:0.22.4
  • wechaty-puppet-padchat 版本:0.18.1
  • node 版本: 10.13.0
  • 你使用的操作系统:CentOS7

2. Bug 描述

请用精简的语言描述你遇到的bug
在群聊中发送消息 '@被踢的人 #k' 通过 msg.metion()方法拿到被@的人 传到 room.del()方法中,如果被踢的人不是我的好友,则删除失败。

3. 复现的步骤 (或者解决的步骤)

在群聊中通过room.del()删除一个不是机器人好友的contact会报错
这一部分非常重要,如果你无法给出复现步骤,我们也很难提供相应的解决办法:

复现步骤中一定要给出复现代码

module.exports = async function (msg) {
  const contact = msg.from()
  const text = msg.text()
  const room = msg.room()
  const topic = await room.topic()
  if (!topic.match(config.messageFilter)) {
    return
  }
  const [atContact] = await msg.mention()

  if (config.admin.includes(contact.id) && text.match(/#k/) && atContact && !config.admin.includes(atContact.id)) {
    try {
      await room.del(atContact)
      await room.say(`${atContact.name()}因发送无关内容被管理小姐姐抱出群聊`)
    } catch (error) {
      console.log(error)
      dingtalk.sendText(`${atContact.name()} 踢出群聊失败, ${error}`)
    }
  }
}

例子:

  • 第一步:room.del(notFriendContact)
  • 。。。

4. 期待程序运行的结果

机器人能够删除任何群成员,无论对方是否为我的好友

5. 程序实际运行的结果

机器人没有对方好友,将msg.metion()获得的联系人传入room.del()参数中无法从群聊中删除该Contact

6. 完整的日志信息:

通过WECHATY_LOG=silly设定环境变量,将设置log 等级为 silly,获取最详细的日志信息(默认log 等级为 info)
请提供完整的日志信息(不要只提供部分的日志截图,请复制粘贴日志内容!)

查看日志
2019-04-08 18:29 +08:00: Error: WXDeleteChatRoomMember error! canot get result from websocket server
2019-04-08 18:29 +08:00:     at PadchatManager.<anonymous> (/service/werewolf_wechatbot/node_modules/wechaty/node_modules/wechaty-puppet-padchat/dist/src/padchat-rpc.js:946:23)
2019-04-08 18:29 +08:00:     at Generator.next (<anonymous>)
2019-04-08 18:29 +08:00:     at fulfilled (/service/werewolf_wechatbot/node_modules/wechaty/node_modules/wechaty-puppet-padchat/dist/src/padchat-rpc.js:4:58)
2019-04-08 18:29 +08:00:     at process._tickCallback (internal/process/next_tick.js:68:7)

7. 其他信息

有相关bug 的背景信息,可以在这里说明

[bug]

不好意思,我无法复现这个问题

以下是我自己测试的代码

bot.on('message', async (message: Message) => {
  const room = message.room()
  const contact = message.from()
  const [ atContact ] = await message.mention()
  if (contact.id === 'lylezhuifeng') { // 这个地方我放了自己测试的微信id
    await room.del(atContact)
  }
}

这个踢人的代码不管是不是好友,只要是在群里的人,并且机器人是群主,就可以踢人成功。

请再测试一下这个问题,如果问题还是能复现,麻烦提供最小复现代码,我会再次尝试复现,如果可以复现,我们这边会尽快解决。

有些人在群聊中 但是通过 @atContact 无法找到该用户,是什么原因呢

请讨论和本issue相关的问题,如果有其他的问题,请开其他的issue来讨论。

Issue不仅是我们之间讨论问题,也是给之后其他的开发者遇到问题时候的参考,所以我们会尽量保证每个issue都只讨论issue标题的问题。

如果移除群成员部分没有其他的问题了,请关闭这个issue,感谢