LoginSignup
4
2

More than 5 years have passed since last update.

Slack Realtime Message APIをRx.Observableにする

Last updated at Posted at 2017-08-28

以下のコードの大部分は https://github.com/slackapi/node-slack-sdk から。


var  Rx = require('rx');

var RtmClient = require('@slack/client').RtmClient;

var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;

var botToken = process.env.SLACK_BOT_TOKEN;

var rtm = new RtmClient(botToken);

var channel;

rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, (rtmStartData) => {
  for (const c of rtmStartData.channels) {
    if (c.is_member && c.name ==='general') { channel = c.id }
  }
  console.log(`Logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}, but not yet connected to a channel`);
});

var source = Rx.Observable.create((observer) => {
  rtm.on(CLIENT_EVENTS.RTM.RAW_MESSAGE, x =>observer.onNext(x))
});

source.filter(msg => msg.match(/Banana/).subscribe(() => {
  rtm.sendMessage("Banana!", channel)
});

rtm.start();

実際必要なのはこの部分

var source = Rx.Observable.create((observer) => {
  rtm.on(CLIENT_EVENTS.RTM.RAW_MESSAGE, x =>observer.onNext(x))
});

var source = Rx.Observable.create((observer) => {
  rtm.on(CLIENT_EVENTS.RTM.RAW_MESSAGE, x =>observer.onNext(x))
});
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2