2016-06-08 57 views
0

我正在使用Slack RTM node client和DM有点问题。假设用户加入之前从未对机器人进行过DM的频道,则用户在机器人通常会响应的频道中输入一条命令,默认情况下,机器人会以私人消息的形式回复用户。但是,bot不能这样做,因为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 
}); 

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

回答

1

您可以使用web API的im.open方法。这里有大约你会如何与@松弛/客户端做(未经测试,提前道歉!):

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 
    }); 
    } 
}); 
+0

我没想到做一些与Web客户端,使这项工作,但从来没有真正尝试过,我会给这明天去吧。感谢您的回复 – Catharsis

+0

嘿只是想说,认为,这确实工作,因为我怀疑,对不起它花了我一段时间来测试它,并得到你,有一个蜱和upvote :) – Catharsis

相关问题