BotkitにはSlackアプリがJSONでユーザ、チャンネル、チームの情報を保持できる簡易DBのような仕組みがあります。
今回はこれを拡張し、保持できる単位を増やしてみました。
simple_storageの拡張
Botkitで利用されている簡易DBは、simple_storage.jsとして実装されているので、そのコードを参考にすることで拡張ができました。
まずは必要となるjfsパッケージをインストールします。
npm i jfs
そしてsimple_storage.jsのstorageに、追加したいDBを足して返す関数を作ります。
ここでは、勤怠情報を保持するスペースとしてkintaiを作っています。ファイル名はstorage.jsの想定です。
'use strict'; import simple_storage from 'botkit/lib/storage/simple_storage.js'; import Store from 'jfs'; export function kintai_storage(config) { if (!config) { config = { path: './', }; } let storage = simple_storage(config); let kintai_db = new Store(config.path + '/kintai', {saveId: 'id'}); let objectsToList = (cb) => { return (err, data) => { if (err) { cb(err, data); } else { cb(err, Object.keys(data).map((key) => data[key])); } }; }; storage.kintai = { get: (kintai_id, cb) => { kintai_db.get(kintai_id, cb); }, save: (kintai_data, cb) => { kintai_db.save(kintai_data.id, kintai_data, cb); }, delete: (kintai_id, cb) => { kintai_db.delete(kintai_id, cb); }, all: (cb) => { kintai_db.all(objectsToList(cb)); } }; return storage; }
そして、この新しいstorageを利用するには、slackbotのパラメータに、storageキーの値を先ほど作成した関数としたオブジェクトを渡してください。
import Botkit from 'botkit'; import { kintai_storage } from './storage'; const controller = Botkit.slackbot({ storage: kintai_storage({path: './data/'}), }).configureSlackApp( ...以下省略
このプログラムを起動すると以下のように、保持できるスペースとして新たにkintaiが追加されていることを確認できます。
data ├── channels ├── kintai ├── teams └── users
本格的に管理するのであれば、Sqliteなどを利用した方がいいと思いますが、一つ増やしたいくらいであれば、このような方法もいいのではないでしょうか。