ハングアウトBotを作ってみる

2018/08/20時点でGoogle側の認証方法が変わったのか、下記の方法で作成したBotは動きません。

#はじめに
ハングアウトChatの正式リリースはいつになるのでしょうか？
今年の3月に発表されチャットBotなどの機能も盛り込まれそうなのですが、今のところ[Early Adopter Program](https://gsuite.google.com/campaigns/index__chateap.html)中のようです、GoogleのAlpha、Betaは仕様変わりそうでまだ手が出せないなと思っていると、↓のBlog記事を教えてもらいました。
Web制作会社トライム：[Googleハングアウトのbotを作成する](https://try-m.co.jp/blog/python/3631/)

サードパーティ製のBotライブラリを使用してハングアウトでBotを実現している模様。
BotライブラリのGitHubページは↓
[GitHub – hangoutsbot/hangoutsbot: Google Hangouts bot](https://github.com/hangoutsbot/hangoutsbot)

単純に同じことするならBlog記事見ろよとなるので、
Windows + Visual Studioでの導入方法などを書いてみる。

# 前提条件

## 開発環境

- Visual Studio 2017 Community 15.4.4 (Python開発インストール済) ※15.4.2ではVisual Studioの言語が英語以外の場合、バグによりPython環境がまともに動かないので注意。
- Python 3.6.3 64bit ※Visual StudioでPython開発環境インストール時にインストールされるPythonでもOK

## アカウントなど

- BotにするGoogleアカウント

# 実際に作ってみる

## プログラム作成

### プロジェクト作成

Visual Studioからプロジェクトの新規作成を行います。
プロジェクトのタイプはPython アプリケーションを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/39e03f3f-8ce3-b607-c507-7fb95bc3a6ac.png)

Botライブラリを取得します。
[GitHub – hangoutsbot/hangoutsbot: Google Hangouts bot](https://github.com/hangoutsbot/hangoutsbot)
からGit CloneなりZipダウンロードなりでライブラリのソースを取得します。

取得したソースを作成したプロジェクトのフォルダにコピーします。
ソリューションエクスプローラーですべてのファイルを表示し、コピーしたファイルをプロジェクトに含めます。
※すべてのファイルを表示をクリックしても表示されない場合は、プロジェクトのアンロード→ロードすると多分表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/9c17eea0-60b5-bc67-c149-ffce076dbef7.png)

プロジェクト作成時に自動で作成されたプロジェクト名.pyファイルは使わないので削除し、**hangupsbot**フォルダ内の**hangupsbot.py**をスタートアップファイルに設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/8f3672b6-ba68-0cec-63f6-b22b33295370.png)

### Python仮想環境作成

他にPythonのプロジェクトを作る予定がないならやらなくてもいい仮想環境作成。
複数のプロジェクトを作成する場合、プロジェクト毎にパッケージバージョンの依存関係などが違うと面倒なことになるのでプロジェクト毎にPython仮想実行環境を作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/2a6c5414-046e-9a25-0d35-09fac4913498.png)

ソリューションエクスプローラーのPython環境の上で右クリックして、表示されるコンテキストメニューの**仮想環境を追加**をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/4748fd55-06cd-9dc3-03eb-66dc63e8201c.png)

表示されたダイアログで

- 仮想環境の場所
- ベースインタプリタ(使用するPythonのバージョンと思ってもらえれば)
- requirements.txtが存在する場合はパッケージのダウンロードインストールを実施するかのチェックボックス

を指定して作成をクリック。
今回はチェックボックスはオフで作成を実行。
すると指定した場所(名称)、指定したベースインタプリタで仮想環境が作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/e316f90e-78d1-a66e-3324-f4303531317d.png)

### 使用するパッケージのインストール

Python標準で用意されている機能以外にも色々な機能のライブラリがパッケージ化され用意されており、
今回使用するBotライブラリもPython標準機能以外も使用しているためパッケージをインストールする必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/e4183814-1d5d-c2f4-2d74-42ce50fda00e.png)

作成した仮想環境上で右クリックして、表示されるコンテキストメニューの**requirements.txtからインストール**をクリックします。
するとパッケージの依存環境を考慮した状態で各種パッケージがインストールされます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/94e2c018-fc74-7398-2ad3-22aa8f72fcb8.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/c8f9113d-4fa2-f0fe-fb52-d03126462696.png)

ここまで完了するとプログラム自体は動作する状態になります。

# 実際に動かす

## Botの起動

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/61b6cd35-b95d-5961-0645-c7fff1b2b0a9.png)

Visual Studioのデバッグメニューから**デバッグの開始**をクリックすると、
今までの設定を全て実施している場合、Python.exeの実行コンソールが起動します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/5f5981a3-e0d8-284f-7064-7f83beffa934.png)

初回起動の場合は、Botに使用するGoogleアカウントのメールアドレスとパスワードを聞かれるので入力してEnterを押してください。
メールアドレス、パスワードがあっていればBotが起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/d330ee05-c3bc-4426-88e7-2cba23580392.png)

別のGoogleアカウントを使用したい場合などは、実行コンソール中に**memory.json**というファイル名のパスがあるので、そのパスのファイルを削除すると初回起動と同じ動きになります。

### メールアドレス、パスワードが一致しているのに認証エラーになる場合

- 2段階認証を使用している場合：アプリパスワードを生成してログイン
- それでもログイン出来ない場合：[Display Unlock Captcha - Google Accounts](https://accounts.google.com/b/0/displayunlockcaptcha)でGoogleアカウントのアクセスを許可すると行けるかも。※実行環境がGUI無しのUbuntu環境とかだとこれで解決しました。

## Botとのやりとり

実際にBotとのやりとりは以下の通り。
あいさつに対する返答と/botコマンドでプラグインによるリマインダー機能を試しています。
/botコマンドによるプラグインはデフォルトで用意されているものもありますが、自分で作成することも出来ます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199859/412cd21d-2160-671a-704b-2345d58941f7.png)

# まとめ

- Googleアカウントの認証周りは全てやってくれるので、とても簡単。
- チャットBotのようなイメージを持っているとちょっと肩すかし。
- 単機能のBotとしてプラグインで拡張出来るのでいいと思う。
- Visual StudioのPython開発は仮想環境作成など一からやるときちょっと面倒な部分をやってくれるので便利。
- ハングアウトChatはよ
- プラグインの作成は元の記事を参考にしてね。

# プラグイン作った時の話

G Suite 組織内ユーザーの予定を名前から取得してみる(https://qiita.com/Shota_Fukuda/private/5c280cece174c58ac044)