Slack の IRC gateway が終了するということもあって、 wee-slack をしばらく使ってみました。

対象バージョン

  • Ubuntu 16.04.4 LTS
  • weechat-core, weechat-curses, weechat-perl, weechat-plugins, weechat-python 2.1-1
  • python-websocket 0.18.0-2
  • wee-slack 2.0.0

依存関係のインストール

WeeChat 自体はWeeChat 側のリポジトリから最新安定版の 2.1-1 をインストールしました。

wee-slack で必要なので、 pip install websocket-client ではなくsudo apt install python-websocket で websocket-client を入れました。

apt search websocket-clientpython-websocketpython3-websocket があったのですが、 weechat-python が依存しているのが libpython2.7 だったので、 python 2 の方のを入れました。

wee-slack のインストール

自分で wee_slack.py をダウンロードしなくても、 weechat 上で /script install slack.py でインストールできますが、 以下のエラーになります。

python: スクリプト "/home/vagrant/.weechat/python/slack.py" のロード中
python: スクリプト "slack"、バージョン 2.0.0 (Extends weechat for typing
notification/search/etc on slack.com) が登録されました
python: 標準出力/標準エラー (slack): Traceback (most recent call last):
python: 標準出力/標準エラー (slack):   File "/home/vagrant/.weechat/python/slack.py", line
3836, in <module>
python: 標準出力/標準エラー (slack):     EMOJI.extend(load_emoji())
python: 標準出力/標準エラー (slack):   File "/home/vagrant/.weechat/python/slack.py", line
3477, in load_emoji
python: 標準出力/標準エラー (slack):     dbg("Couldn't load emoji list: {}".format(e), 5)
python: 標準出力/標準エラー (slack): UnicodeDecodeError: 'ascii' codec can't decode byte
0xe3 in position 10: ordinal not in range(128)
python: ファイル "/home/vagrant/.weechat/python/slack.py" を解析できません

そのため、 weemoji.json をダウンロードして WEECHAT_HOME に置く必要がありました。

$ wget https://raw.githubusercontent.com/wee-slack/wee-slack/master/weemoji.json
$ mv weemoji.json ~/.weechat

そして、 /script install slack.pyscript: スクリプト "slack.py" の最新版がインストール済みです になったので /script load slack.py としてみると、

python: スクリプト "/home/vagrant/.weechat/python/autoload/slack.py" のロード中
python: スクリプト "slack"、バージョン 2.0.0 (Extends weechat for typing
notification/search/etc on slack.com) が登録されました

と出てきて使えるようになりました。

チーム追加

/slack register で出てくる URL を開いて許可します。 メッセージは以下のように出ます。

#### Retrieving a Slack token via OAUTH ####

1) Paste this into a browser:
https://slack.com/oauth/authorize?client_id=...&scope=client
2) Select the team you wish to access from wee-slack in your browser.
3) Click "Authorize" in the browser **IMPORTANT: the redirect will fail, this is
expected**
4) Copy the "code" portion of the URL to your clipboard
5) Return to weechat and run `/slack register [code]`

許可すると、 wee-slack の 3 の説明にあるように http://not.a.realhost/?code=コード&state= にリダイレクトされてエラー画面になるので、 code=コードコード の部分をコピーして、 /slack register コード を実行すると

Success! Added team "NAME"
Please reload wee-slack with: /script reload slack

とメッセージが出るので、 /script reload slack すると繋がって、チャンネルなどが出てきます。

複数チームを登録する場合は /slack register/slack register コード を繰り返せば良いようです。

その他のおすすめ設定

weechat-cursesでの罫線の文字幅問題を回避するの設定の他に、 以下のような設定をしました。

バッファ一覧関連

以下の設定をしてもすぐに並び変わらないようで、 weechat を再起動したらサーバーごとのツリーになっていました。

/set irc.look.server_buffer independent
/set irc.look.new_channel_position near_server
/set irc.look.new_pv_position near_server

logger

IRC は bouncer 経由なのでログ不要ということでログをとらないようにしたのと、 ログは基本的に日付ごとに分けるようにしました。 slack のログを取らないようにする方法はすぐにはわかりませんでした。

/set logger.level.irc 0
作成されたオプション: logger.level.irc = 0  (デフォルト: 9)
/set logger.file.mask "%Y/%m/%d/$plugin.$name.weechatlog"
変更されたオプション: logger.file.mask = "%Y/%m/%d/$plugin.$name.weechatlog" (デフォルト: "$plugin.$name.weechatlog")

プラグイン

使ってみているプラグインとその設定です。

go

/script install go.py
/set plugins.var.python.go.sort "hotlist,number,beginning"
/key bind ctrl-G /go

sort 順は "number,beginning" から変更しました。 キー割り当ては /key bind ctrl-g /go ではダメで G にする必要がありました。

切り替えの入力を失敗して発言してしまったことがあったので、 auto_jump も有効にしてみました。

/set plugins.var.python.go.auto_jump "on"

hotlist でソートするようにしていると、 ctrl-G Enter ですぐに移動できると思いきや、 デフォルトで選ばれているのが現在表示しているチャンネルで、 Tab, Shift+Tab に前後に移動できるものの、 遠いと移動するよりも数字を入力するなどした方が早くなるので悩んでいたところ、 普通のチャンネルは サーバー名.チャンネル名. を含むので、 ctrl+G . Enter で簡単に移動できると気づきました。

urlbuf

番号と URL のみが urlbuf というバッファにたまるようです。 URL が含まれる発言がわかるわけではないようなので、一度みたものを後から参照したり、 改行が入ってコピーしにくかったのをコピーしやすくする、ぐらいの用途には使えそうです。

/script install urlbuf.py

後述のプラグインで 2.chanmon, 3.highmon になって、 番号がすべて chanmon の番号になってしまって、 元々どのチャンネルの発言かわからなくなっていたので、 skip_buffers の設定をしました。

/set plugins.var.python.urlbuf.skip_buffers "2,3"

chanmon

LimeChat などにあるような全チャンネルの発言が流れるバッファーができます。

/script install chanmon.pl
/chanmon help

highmon

ハイライトを含む行を集めたバッファーができます。 slack の @here の行も溜まっていました。

キーワードハイライトの設定自体は weechat 側の設定になります。

/script install highmon.pl
/highmon help
/set weechat.look.highlight "$nick,znz,西山"

autosort

バッファ一覧の順番が安定するように autosort を入れてみました。

/script install autosort.py
/autosort rules list
/autosort helpers list

しばらく使ってみた感想

インストール時に weemoji.json でこけてソースをみないと解決方法がわからなかったり、 色々な設定やプラグインとの組み合わせが IRC サーバーとは違って、何かうまくいかない感じだったり、 スレッド対応が微妙 (チャンネルにも発言するようなリプライでもチャンネル側に出てこないとか issues を thread で検索すると色々でてくるとか) だったり、 基本的なところ以外は問題もありそうですが、 公式の Slack クライアントと併用する感じだと、 IRC とまとめて確認できる環境になって便利そうです。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published