【问题标题】:Messaging a user a bot does not know向机器人不认识的用户发送消息
【发布时间】:2016-06-09 02:07:13
【问题描述】:

我正在使用Slack RTM node client,但 DM 有点问题。假设一个用户加入了以前从未 DM 过机器人的频道,用户在频道中键入一个机器人通常会响应的命令,并且默认情况下,机器人会在私人消息中回复用户。但是,机器人无法执行此操作,因为 dataStore 不包含此用户的任何 DM 数据。下面的代码示例...

rtm.on(RTM_EVENTS.MESSAGE, function (message) {
  user = rtm.getUserById(message.user);
  console.log(user); // It gets the user object fine
  dm = rtm.getDMByName(user.name);
  console.log(dm); // This is always undefined unless the user has DM'ed the bot previously
});

有没有办法解决这个问题?我似乎在文档或代码中找不到任何暗示可能存在的内容。

【问题讨论】:

    标签: node.js slack-api rtm


    【解决方案1】:

    您可以使用 Web API 的 im.open 方法。以下是您使用@slack/client 的大致方法(未经测试,提前道歉!):

    var webClient = new WebClient(token);
    ...
    rtm.on(RTM_EVENTS.MESSAGE, function (message) {
      var dm = rtm.getDMById(message.user);
      if (dm) {
        console.log(`Already open IM: ${dm}`);
        // send a message or whatever you want to do here
      } else {
        webClient.im.open(message.user, function (err, result) {
          var dm = result.channel.id;
          console.log(`Newly opened IM: ${dm}`);
          // send a message or whatever you want to do here
        });
      }
    });
    

    【讨论】:

    • 我确实考虑过使用 webClient 做一些事情来完成这项工作,但从未真正尝试过,明天我会试一试。感谢您的回复
    • 嘿,我只想说,这确实像我怀疑的那样有效,抱歉,我花了一段时间来测试它并回复你,打勾并点赞 :)
    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 2020-11-12
    • 2012-09-21
    • 2019-08-06
    • 2019-10-28
    • 2022-01-08
    • 2021-03-23
    • 2022-08-11
    相关资源
    最近更新 更多