読者です 読者をやめる 読者になる 読者になる

何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

Slackに電卓を入れたい

をとこもすなるSlackといふものを をむなもしてみんとてするなり

世間ではSlackを活用したChatOpsという流れもあるなかで、Skypeすら全面的に禁止されている環境ではSlackなど望むことすらできなかった。 とはいえ、Slackは個人でも使えるので自分でやってみることにした。

単なるチャットは昔から使ってきたので、botを作って理解を深めようと思い、電卓botを作ってみた。

利用するライブラリ

Slackのbot周りは slackbot、数式周りはSymPyを採用した。

github.com github.com

既存のライブラリを使っただけである。

実装

実装の本質部分は以下のとおりである。 時間があればGitHubにあげておきたい。

from slackbot.bot import respond_to
from slackbot.bot import listen_to
from sympy.parsing.sympy_parser import parse_expr
    
@listen_to('\d* *(\+|-|/|\*|\*\*) *\d*')
def simple_calculator(message, statement):
    message.reply("{} = {}".format(message.body['text'], str(parse_expr(message.body['text']))))

@respond_to('.*')
def sympy_respond(message):
    message.reply(str(parse_expr(message.body['text'])))

使用例

f:id:XaroCydeykn:20160521191323p:plain

二項演算を入力するか、botへSymPy形式で数式を渡すとリプライとして演算結果が返される。 100!も簡単に計算できる。

今後

二項演算のバリエーションを増やしていきたい。 また、想定していない動きもするので暇があれば追加していきたい。

ちなみに、これは第64回 Python mini-Hack-a-thonの成果である。

pyhack.connpass.com