LoginSignup
0
0

More than 5 years have passed since last update.

[Slack]チャンネルのピンが外されたら再度ピンしてくれるBot

Posted at

Slackには Pin という機能があります。
重要なメッセージやファイルなどをチャンネルにピン留めしておくことで
いつでも参照できるという機能です。

先日、新たに参加したメンバーがSlackの使い方をよく理解しておらず、
チャンネル内にピン留されたメッセージなどをすべてはずしてしまうということがありました。

そこで誤ってピンが外れされてしまったとしても、再度自動でピンをしてくれるBotを
botkitを使って作成してみました。

 成果物

repin_bot4.gif

ピンが外れされたら、外した人へ警告メッセージを送信すると同時に
再度ピン留を行っています。

ピンを外したい場合は特定のキーワードを発言することで、
一定時間のみピンをはずすことができます。

コード

bot.js
if (!process.env.token) {
  console.log('Error: Specify token in environment');
  process.exit(1);
}

var Botkit = require('botkit');

var controller = Botkit.slackbot({
  debug: false
});

var bot = controller.spawn({
  token: process.env.token,
  retry: true
}).startRTM(function(error){
  if(error){
    throw new Error(error);
  }
});

let canPinRemoved = false;

controller.hears('ピンはずさせてやー', ['direct_message', 'direct_mention', 'mention'], (bot, message) => {
  canPinRemoved = true;
  bot.reply(message, '30秒だけ待ったる');
  setTimeout((bot, message) => {
    canPinRemoved = false;
    bot.reply(message, 'ほい時間ぎれー');
  }, 10000, bot, message);
});

controller.on('pin_removed', function(bot, message) {

  if(canPinRemoved) return;

  bot.api.users.info({
    user: message.user
  }, function(error, result){
    if(error) console.log(error);

    let userName = result.user.name;

    bot.api.pins.add({
      channel: message.channel_id,
      timestamp: message.item.message.ts
    });

    bot.say({
      text: `ちょっと @${userName} はん。 勝手にピンはずさんといてやー。\nしゃあないからもっかいピンしといたでー`,
      link_names: true,
      channel: message.channel_id
    });
  });


});

controller.on で pin_removed イベントを待機します。
イベントが発生したら message オブジェクトから必要な値を取得していきます。
ここではイベントを発生したユーザーがIDで渡ってくるので
users.info API を使用してユーザー名を取得しています。

ピン留は pins.add APIを使用して行っています。
ここでは timestamp に対象のメッセージのtimestampを設定することで
メッセージのピン留めを行うことができます。

今回の実装ではファイルなどのピン留めには対応していないため、
また対応できるようにしていきたいです。

コードはこちらにもあげております。

0
0
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
0
0