ホームページ制作・大阪インフォメーションメディアデザイン

06-6809-5021

Staff Blog
スタッフブログ

  • Twitterでシェア
  • このエントリーをはてなブックマークに追加
  • Google+でシェア
  • follow us in feedly

Skype bot 始めました♥

お久しぶりです!ひらいです!

近頃チャットツールでslackがはやりつつあり、slackと検索をかければカスタマイズ系の情報がわんさか出てきますが、
弊社のメインチャットツールはまだスカイプが優勢!だったりしますので
Pythonを使ってskypeのbotを入れてみました★
(検索しても1件くらいしか日本語の解説が見当たらなかったsevabotをつかいました[圧倒的情報不足…!!])
(slackのbotも作って入れてみたけど今は不具合お休み中です)
あと今回のメインはbotのカスタマイズですのでインストール手順は結構ざっくりと行きます。

ちなみにsevabot公式ドキュメントはこちら(英語です)
https://sevabot-skype-bot.readthedocs.io/en/latest/index.html

ではまず用意するもの

  • centos7(スカイプを使いますのでGUI版を使用します)
  • Bot用skypeのID(自分のIDを作成する感じです)
  • git(sevabotをクローンしてくるときに必要)
  • pyenv + virtualenv セットアップ
  • pipセットアップ(Pythonのパッケージ管理システム)

● centos7

CUIの状態からでも使う方法は公式に載ってますが、英語ですので頑張って解読してください。
https://sevabot-skype-bot.readthedocs.io/en/latest/ubuntu.html#setting-up-skype-and-remote-vnc
多分ここらへんにモニターの作り方みたいなのが書いてると思います。

● Bot用skypeのID(自分のIDを作成する感じです)

centos外でもskypeを立ち上げておいてbot用アカウントと友達になっておいてください

● pyenv + virtualenv セットアップ

参考サイト:http://qiita.com/saitou1978/items/e82421e29e118bd397cc

● pip

参考サイト:http://www.lifewithpython.com/2012/11/Python-package-setuptools-pip.html

以上の前提でやります。

まずはskypeをcentosの中にインストールしましょう

やり方は様々あると思いますが、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は無事インストールされたと思います。

sevabotを入れましょう

ここで大切なのは、作られたパッケージの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/
を表示させてみてください。

sevabot1

これが表示されたらうまくいってます。
下の方にShared secretなるものがありますが、
先ほどつくったsettings.pyに記載する欄があるので
好きな文字を登録しておくと、その文字で入ることができます。
入ってからできる云々は今回割愛いたします。(今後説明できる機会があると思います)

sevabotで遊んでみましょう~♪

sevabotとコマンドを打った状態で
centos外のアカウントの方からbotアカウントに!pingと送ってみてください
pongとかえってきたら成功です。
sevabot2
こんな感じ
ちなみにデフォルトで使えるコマンドはこんな感じです(以下サイトの引用の和訳です)
http://sevabot-skype-bot.readthedocs.io/en/latest/commands.html#id4

!reload: 編集したコマンドのスクリプトをリロードし、現在使用可能なコマンドのリストの一覧を表示する
!ping: ボットの生存確認
!sad: だめよ、あなた泣かないで
!weather: 都市の天気を openweathermap.org からとってくる
Example: !weather Tokyo(Osakaは使えない 笑)
!timeout: 時間切れのコマンドを確認する
!soundcloud: soundcloudのプレイリストを取得する。
動かすにはsoundcloud.rbファイルを編集してね
!dice: さいころを投げるよ!
!tasks: タスクマネージャー(多分これも使うのに設定が必要)
!call: 通話機能(botには必要ないかも) !call helpで詳細が見れるよ

以上がデフォルトで備わっている機能たちです。

さてここからがメインパートです

コマンドのカスタマイズをしよう!【初級編】

それではデフォルトにあるコマンドファイルを改造して、自分のオリジナルコマンドを作っちゃいましょう
初級編で使用するデータは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 ユーザー名 と返ってくるように改造してみましょう~

手順はざっくりとこちら

  1. settings.pyのMODULE_PATHSに"custom"を追加(一回のみ実行)
  2. custom/配下にコマンドで使いたいファイルを設置
  3. 変更するファイルを編集+保存
  4. chmod u+x custom/ファイル名 をコマンドで実行
  5. sevabot コマンド実行
  6. skypeでbotに!reloadとつぶやく
  7. "!"+作ったファイル名をbotにつぶやく→結果!

ということで初めて行きましょう

settings.pyのMODULE_PATHSに"custom"を追加

デフォルトのコマンドたちはmodulesというフォルダーの中に入っていると思うのですが、
自作のコマンドとごっちゃにならないようにsevabotにはcustomというフォルダーがあらかじめ作られています。
なので、自作のファイルはそっちに保存しましょう!
一つ目の手順は簡単です。settings.pyに

MODULE_PATHS = ["modules"]

と書かれていると思いますので、
その部分を

MODULE_PATHS = ["modules","custom"]

に置き換えてください。(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"]

に置き換えてください

chmod u+x custom/ファイル名 をコマンドで実行

詳しいことはわからないけどこのコマンドを実行しないと後々のreloadが効かなくなりますのでご注意を
UNIXの実行スクリプト的なものだと思います。

sevabot コマンド実行

skypeでbotに!reloadとつぶやく

デフォルトコマンド集にあったreloadですね
"!"マークは必須ですよ!

"!"+作ったファイル名をbotにつぶやく→結果!

bot目がけて!helloとつぶやいてみてください!こんな感じになって入れば成功です!

sevabot3

以上です!どうでしょう?思ったより簡単でしたよね!

一回作ってしまえばあとは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化計画を考えています♪

今後の課題としては

  1. クラウド上に常駐(デーモン)サービス化する
  2. グループ板のbotとして存在させる
  3. 会社に役立つ機能を搭載する
    • ・登録してあるtodoを教えてくれる
    • ・git labのhookで通知をskypeへ飛ばす

以上のことができればみんなに愛される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)+"です(*)"

試してみてね♪

追記:グループ内でのbotについて

なんと衝撃的な事実が発覚しました…
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を入力してもスカスカのクラウドグループが空しく生産されたのか!
とようやく納得しました。なんていうかすごく悲しいです。これからグループチャットの道はあきらめるしかないのかなぁ…

この記事を共有する

投稿者:i.M.D. Staff
    2016年07月27日水曜日 | 17:54
    コマンドの!マーク抜けには気を付けて!ね!

    この人が書いたその他のブログ記事

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    ranking 人気記事ランキング

    • I.M.Dコーポレートサイト
    お問い合わせ