0

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

これを回避する方法はありますか?ドキュメントやコードに、存在する可能性があることを示唆するものは何も見つからないようです。

4

1 に答える 1

1

im.openWeb 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
    });
  }
});
于 2016-06-08T18:07:13.440 に答える