2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Errbotで最初からWebserverを有効にする

Last updated at Posted at 2018-01-08

Webserverを有効にする方法

ErrbotにはWebserver Pluginが最初からcore pluginとして盛り込まれており、これを使うことによってBot側でWebserverを立ち上げることが可能になっています。

これを使うと、例えばSlackでいうOutgoing webhooksのように、とあるサービスからhookを受けることができるようになります。

が、この機能はデフォルトでは有効化されていません。その状態は、 !status コマンドを実行することによって分かります。

init_webserver_status.png

上記の通り、Needs to be configured という状態になっており、この状態では有効になっていないことが分かります(有効な場合はActivatedになります)。

ここからWebserverを有効にする場合は、!plugin config Webserverと入力すれば、「デフォルト設定は以下をコピペすればいいよ」と教えてくれます。
この通りに発行すれば、めでたくWebserver機能は有効になります。

!plugin config Webserver 
{'HOST': '0.0.0.0',
'PORT': 3141,
'SSL': {'certificate': '',
        'enabled': False,
        'host': '0.0.0.0',
        'key': '',
        'port': 3142}}
webserver_config.png

以下の通り、plugin statusもActivatedになっています。

webserver_status.png

Webserverを最初から有効にする

が、Webserver機能を有効化するために、わざわざSlack(などのチャットツール)を起動してコマンドを流し込むより、最初からWebserver機能を有効化したくなります。
ソースを見ると、self.configに設定が入っていないために有効化されていないようです。

このself.configをどこから設定するのかで非常に悩みました。

Webserverから継承した別pluginを作ってconfig設定を行う

一番最初に思いついたのが、Webserverを継承する方法です。結論としては、あまり良い方法ではないです。
いわば、以下の方法です(githubで適当に検索して出てきたものを紹介)。

from errbot.core_plugins.webserver import Webserver
# from errbot import BotPlugin <-普通はこちら

class Web(Webserver):
# class Web(BotPlugin): <-普通はこちら

Webという独自のpluginを作り、それはBotPluginではなくWebserverを継承します。pluginではactivate関数が有効化時に呼ばれるので、そこでWebserverを継承したWebにてself.configを設定します。

ただ、これだと動くことは動くのですが、!helpが使えなくなるという罠があります。

type object 'Webserver' has no attribute '__errdoc__'

Dependencyを定義する

悩みに悩んでいろいろ試行錯誤して、うまい方法が確立できました。

以下にサンプルを用意しました。

こちらは、明示的にWebserverpluginへの依存関係を指定しています。

# !status
┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Status ┃ Name                   ┃
┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ *A*    │ Webserver              │
├────────┼────────────────────────┤
│ *A*    │ WebserverConfiguration │
└────────┴────────────────────────┘
*A* = Activated, *D* = Deactivated, *B* = Blacklisted, *C* = Needs to be configured

自動的にWebserver設定が有効にはなったものの

Webserver機能の有効化を、pluginの導入というErrbot自体に手を加えない方法で実現できたのですが、最大の問題として plugin自体が自動で取り込まれない という点が挙げられます。初回にチャットツールを起動したら、pluginを取り込む操作を行わなければなりません。つまり、 !repos install ...を入力するしかないのです。

開発時は以下のように BOT_EXTRA_PLUGIN_DIR を指定してローカルのプラグインを取り込めるのですが、可能であればBot初回起動時に自動でcloneしてくれないものだろうか…。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?