お久しぶりです!ひらいです!
近頃チャットツールでslackがはやりつつあり、slackと検索をかければカスタマイズ系の情報がわんさか出てきますが、
弊社のメインチャットツールはまだスカイプが優勢!だったりしますので
Pythonを使ってskypeのbotを入れてみました★
(検索しても1件くらいしか日本語の解説が見当たらなかったsevabotをつかいました[圧倒的情報不足…!!])
(slackのbotも作って入れてみたけど今は不具合お休み中です)
あと今回のメインはbotのカスタマイズですのでインストール手順は結構ざっくりと行きます。
ちなみにsevabot公式ドキュメントはこちら(英語です)
https://sevabot-skype-bot.readthedocs.io/en/latest/index.html
ではまず用意するもの
CUIの状態からでも使う方法は公式に載ってますが、英語ですので頑張って解読してください。
https://sevabot-skype-bot.readthedocs.io/en/latest/ubuntu.html#setting-up-skype-and-remote-vnc
多分ここらへんにモニターの作り方みたいなのが書いてると思います。
centos外でもskypeを立ち上げておいてbot用アカウントと友達になっておいてください
参考サイト:http://qiita.com/saitou1978/items/e82421e29e118bd397cc
参考サイト:http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html
以上の前提でやります。
やり方は様々あると思いますが、centos内でうまく起動できるならどのやり方でも特に問題ないです。
sevabot公式には詳しいskypeの入れ方は書いてありますが、
私はなぜかそれではうまくいかなかったのでこんな感じで入れました。
$ wget http://download.skype.com/linux/skype-4.1.0.20.tar.bz2 #skypeのダウンロード
$ tar jxvf skype-4.1.0.20.tar.bz2 #解凍
$ mv skype-4.1.0.20 skype #skypeにリネーム
$ rm skype-4.1.0.20.tar.bz2 #解凍用パッケージの削除
$ ./skype #skype の起動
以上でskypeは無事インストールされたと思います。
ここで大切なのは、作られたパッケージのPythonバージョンと、
入れる際の自分のPythonバージョンを同じかまたは近くのバージョンにしておくことです。
Python 3でPython 2のものを入れたりしようとすると高確率でエラーが出ますのでご注意ください。
(文法のルールが変わっていたりするため)
なので…
まずはPythonの環境を整えましょう。
sevabotのサイトによりますと
https://github.com/opensourcehacker/sevabot
The bot is written in Python 2.7.x programming language, but can be integrated with any programming languages over UNIX command piping and HTTP interface.
sevabotは Python 2.7.xでかかれていますので
以下を見ながら
http://qiita.com/saitou1978/items/e82421e29e118bd397cc
コマンドラインで事前にインストールできるバージョンを確認します
$ pyenv install —list
$ pyenv install 2.7.10 #ここでPythonの2.7.10のバージョンを入れます
(2.7.11でもうまくいきました)
$ pyenv virtualenv 2.7.10 sevabot #新しく作る環境名なのでお好きにつけてください*
これでsevabotをインストールする環境ができたと思いますので
$ pyenv versions
で確認してみましょう
2.7.10/envs/sevabot
こんな感じのものができていると思います。
後は…
$ cd [sevabotのファイルを置きたい場所に移動して]
$ git clone git://github.com/opensourcehacker/sevabot.git #sevabot作業用ファイル込のものをインストールしてきて
フォルダーの中に入ってみましょう
$ cd sevabot
$ pyenv local sevabot
でさっき作ったpython 2.7.10の環境に切り替わると思います
ここまで来たらあとはpipでsevabotさんを入れるだけです
$ pip install sevabot
以上です!これでとりあえずsevabotさんはインストールできてるはずです。
セッティングフォルダーをコピーして作りましょう
$ cp settings.py.example settings.py
さて、このフォルダーに何書くねん!って話ですが、
ADMINS = [""]
ココの部分には、botと友達になったあなたのアカウントIDをいれてください
※ここに情報を入れておかないとbotと友達になっても反応してくれません
centosの中にインストールしたskypeを起動して作ったアカウントでログインして状態で
コマンドラインにこう打ちましょう
$ sevabot
そうするとskypeの方に[ほかのサービスがこのプログラムを使用することを許可しますか~?]
的な警告みたいなの出ると思いますが、許可しておいてください(ウィルスとかじゃないので大丈夫です)
コマンドラインでは最後の行これが流れてくると思います
2016-07-13 15:38:46,610 - werkzeug - INFO - * Running on http://localhost:5000/ (Press CTRL+C to quit)
sevabotさんにはデフォルトHOSTが割り当てられていますのでとりあえずブラウザーを立ち上げて
http://localhost:5000/
を表示させてみてください。
これが表示されたらうまくいってます。
下の方にShared secretなるものがありますが、
先ほどつくったsettings.pyに記載する欄があるので
好きな文字を登録しておくと、その文字で入ることができます。
入ってからできる云々は今回割愛いたします。(今後説明できる機会があると思います)
sevabotとコマンドを打った状態で
centos外のアカウントの方からbotアカウントに!pingと送ってみてください
pongとかえってきたら成功です。
こんな感じ
ちなみにデフォルトで使えるコマンドはこんな感じです(以下サイトの引用の和訳です)
http://sevabot-skype-bot.readthedocs.io/en/latest/commands.html#id4
以上がデフォルトで備わっている機能たちです。
さてここからがメインパートです
それではデフォルトにあるコマンドファイルを改造して、自分のオリジナルコマンドを作っちゃいましょう
初級編で使用するデータはmodulesフォルダーの中にあるsad.pyというフォルダーです
中身は至って単純。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
A simple sample module with Skype smileys
"""
import os
print "Sevabot loves %s (hug)" % os.environ["SKYPE_FULLNAME"]
こんな感じで書かれています。
これはPythonのファイルですが、sevabotではRubyやShellを使ってコードを書くこともできます。
今回はこのファイルを改造して、!helloと打ったらHello ユーザー名 と返ってくるように改造してみましょう~
手順はざっくりとこちら
ということで初めて行きましょう
デフォルトのコマンドたちはmodulesというフォルダーの中に入っていると思うのですが、
自作のコマンドとごっちゃにならないようにsevabotにはcustomというフォルダーがあらかじめ作られています。
なので、自作のファイルはそっちに保存しましょう!
一つ目の手順は簡単です。settings.pyに
MODULE_PATHS = ["modules"]
と書かれていると思いますので、
その部分を
MODULE_PATHS = ["modules","custom"]
に置き換えてください。(customをいうファイルを追記)
modulesフォルダの中にあるsad.pyをコピーして、customフォルダの中にペーストしましょう。
その際ペーストしたファイル名はhello.pyに変更しておいてください。
ファイル内
print "Sevabot loves %s (hug)" % os.environ["SKYPE_FULLNAME"]
という部分を
print "Hello %s ちゃん(wave)" % os.environ["SKYPE_FULLNAME"]
に置き換えてください
詳しいことはわからないけどこのコマンドを実行しないと後々のreloadが効かなくなりますのでご注意を
UNIXの実行スクリプト的なものだと思います。
デフォルトコマンド集にあったreloadですね
"!"マークは必須ですよ!
bot目がけて!helloとつぶやいてみてください!こんな感じになって入れば成功です!
以上です!どうでしょう?思ったより簡単でしたよね!
一回作ってしまえばあとは5~7の手順を繰り返すのみです。
こんな感じで初級編のカスタマイズはできるようになったと思います。
時間帯によって返事を返したい場合は以下に入れ替えてみてください
import os #変更なし以下追記分
from datetime import datetime
import datetime
now_time = datetime.datetime.now()
now_time.hour
if now_time.hour < 12:
print "おはようございます(wave) %sちゃん" % os.environ["SKYPE_FULLNAME"]
elif now_time.hour == 12:
print "お昼ですね(pi) %sちゃん" % os.environ["SKYPE_FULLNAME"]
elif (now_time.hour > 12) and (now_time.hour < 17):
print "午後も頑張ろう(sun) %sちゃん " % os.environ["SKYPE_FULLNAME"]
elif now_time.hour == 19:
print "今日もお疲れさま(d) %sちゃん " % os.environ["SKYPE_FULLNAME"]
else:
print "こんばんは(fireworks) %sちゃん" % os.environ["SKYPE_FULLNAME"]
以上、skype bot 導入編でした!
現時点では、ローカル環境でsavabotサーバを起動している状態です。
これからいろいろな機能を追加してIMD内でも愛されるbot化計画を考えています♪
今後の課題としては
以上のことができればみんなに愛されるbotになってくれるんじゃないかなと思っています。
今回はこれで終わりです。今後変化があればまた投稿いたします♪
★おまけ
botがあなたの運勢を教えてくれるPythonコード
ファイル名 fortune.py
bot用コマンド !fortune
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
おみくじ☆
"""
import sys
import random
import os
from datetime import datetime
import datetime
now_time = datetime.datetime.now()
now_time.hour
progname = 'fortune'
luck = [
"大吉",
"中吉",
"吉",
"末吉",
"小吉",
"凶",
"大凶"
]
chosen_luck = random.choice(luck)
if now_time.hour < 15:
print os.environ["SKYPE_FULLNAME"]+"の今日の運勢は"+(chosen_luck)+"です(*)"
else: #16時以降は明日の運勢を教えてくれるよ
print os.environ["SKYPE_FULLNAME"]+"の明日の運勢は"+(chosen_luck)+"です(*)"
試してみてね♪
なんと衝撃的な事実が発覚しました…
sevabotっていうのはSkypy4Pyというパッケージを元に作られたフレームワークなのですが、
そのSkype4Pyというものは結構古いもので(今から4年くらい前に作られている)、
グループチャットからの情報を取得する際にグループIDなるものを取得してbotを反応させていたのですが、
なんと最近のスカイプでのグループチャットはP2P※1から※2クラウドに移行しているらしく、
新しく生成されるグループで取得できる番号ではSkype4Pyではうまく動きません…
という内容と解決策が以下のアドレスに記載されていたのですが
http://mada0833.blogspot.jp/2014/12/skype-api-memo.html
簡単にまとまると、スカイプのコマンドで/createmoderatedchat と入力すると、空のP2Pチャットグループが生成され、
そこにbotちゃんを入れると問題なく動くよ、というもの
※1:P2Pのことをよく知りたい人のための参考サイト:
https://support.skype.com/ja/faq/FA10983/p2ptong-xin-tohahe-desuka
※2:クラウドのことをよく知りたい人のための参考サイト:
https://support.skype.com/ja/faq/FA12381/kuraudotohahe-desuka
それがですね、本当に最近の最近までうまくいっていたようなんですが、以下のサイトの項目
How to create a P2P-chat?(P2Pチャットってどうやって作るの?)の部分によりますと
http://www.skaip.org/skype-chat-commands
"Since May 22, 2016 on Skype is not possible to create P2P-chats. Nevertheless, cloud chat now also support moderating functions."
(5月22日以降、2016年のスカイプではP2Pチャットは作れません(断言)。
だけど、クラウドチャットがP2Pで扱ってた機能をクラウドチャットで使えるようにしたよ★)的な内容
!!!!!
まじか!それで何回/createmoderatedchatを入力してもスカスカのクラウドグループが空しく生産されたのか!
とようやく納得しました。なんていうかすごく悲しいです。これからグループチャットの道はあきらめるしかないのかなぁ…