Обмен сообщениями пользователя бот не знает

Я использую клиент Slack RTM и у меня возникли проблемы с 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
});

Это можно обойти? Я не могу найти что-нибудь в документах или коде, чтобы предположить, что это может быть.

1 ответ

Решение

Вы можете использовать im.open метод веб-API. Примерно как вы это сделаете с @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
    });
  }
});
Другие вопросы по тегам