Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@0622okakyo

BotKit 4.xでのライブラリ仕様変更について

More than 1 year has passed since last update.

こんにちは、おかきょー言います。

最近、Botkit でのライブラリの仕様変更により、 これまでに掲載されているQiita での方法では実装すると、

TypeError: Botkit.slackbot() is not a function

とエラーが返されました。調べてみると、バージョンが4.0に変更してから、記述方法が変わっていることがわかりました。
この記事では、どのように変化したかについてまとめてみたいと思います。

この記事は、こちらの記事を参照しました.
https://botkit.ai/docs/v4/advanced.html#how-to-upgrade-from-07-to-40

変更後の仕様について

この仕様変更については主に以下の点で変更がありました。

  • ライブラリが TypeScript で開発されている
  • async, await といった非同期処理で実装されていること
  • プラットフォームに依存しないライブラリに変更したこと

コードでの変化

ボットをインストールときの変更点

Botkit では、それまでBotkit のライブラリ内にSlack、Facebook 等で利用できるライブラリが定義されていました。しかし、4.0以降では作りたいボットに応じて、botbuilder-adapter-xxx が必要です。そのため、Slackbot を利用する時は、

npm install --save botbuilder-adapter-slack

を先にインストールしないといけません。

  • 0.7 以前の書き方
var Botkit = require('botkit');
var controller = new Botkit.slackbot(options);
  • 4.0 以降の書き方
const { Botkit } = require('botkit');
const { SlackAdapter } = require('botbuilder-adapter-slack');

const adapter = new SlackAdapter({

    //認証には、BotTokenだけでなく、verificationToken,
   //あるいは clientSingleSecretToken のいづれかが必要です。

    verificationToken:process.env.SLACK_VERIFY,
    botToken: process.env.SLACK_TOKEN
});

let controller = new Botkit({
    adapter: adapter
});

構文上での変更点

コードを記述する際、これまでと異なり、async, await を利用した書き方に変化しています。

  • 0.7 以前での書き方
controller.hears('foo', 'message_received', function(bot, message) { 
    bot.reply(message,'bar');
});
  • 4.0 以降の書き方
controller.hears('foo', 'message', async(bot, message) => { 
    await bot.reply(message,'bar');
});

direct_message,mension での使い方

Botkitでは、 0.7以前では、direct_message, mention に対して事前に含まれていましたが、これらを利用する際は、botbuilder-adapter-slack からそれらが使えるようになるミドルウェアを読み込む必要があります。

-0.7 以前

controller.hears('foo', 'direct_message', function(bot, message) { 
    bot.reply(message,'bar');
});

-4.0 以降

const { SlackAdapter,SlackMessageTypeMiddleware} = require('botbuilder-adapter-slack');

adapter.use(new SlackMessageTypeMiddleware())

(省略)

controller.hears('foo', 'message', async(bot, message) => { 
    await bot.reply(message,'bar');
});


以上の方を参考にして、Slack Bot を開発するといいです。

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?