Discordでの挨拶メッセージをchromedpで自動化(Go言語)
今回の動機
私が関わっている業務では、メッセージツールにDiscordを利用しているのですが、業務の始業と就業の挨拶メッセージを忘れてしまうことがあります。
そこで、決まった時間に必ず挨拶メッセージを自動でしてくれるようなツールを作りたいと思ったのですが、Discordのウェブフックなどを利用するとBotということがバレてしまうので、自身のアカウントでなんとかメッセージを自動的に送れないかと考えました。
chromedpを使ってみる
思いついたのは、headlessブラウザを利用して、Discordにログインして、対象のチャンネルでメッセージを入力することでした。
調べてみると、Go言語にchromedpという、Chromeをヘッドレスで操作できるパッケージがありました。
とりあえず、このパッケージを使ってサクッと試してみようと思い、早速インストールしてみました。
$ go get -u github.com/chromedp/chromedp
ソースを書く前にサイトを調査
ソースコードを書く前に、まずはDiscordのサイトがどうなっているかを調査しました。
主に、メッセージを目的のチャンネルに送るには、どういう設定データが必要なのか?ということで、調査した結果、以下のデータが必要だということがわかりました。
- Discordアカウント メールアドレス < ログインで必要
- Discordアカウント パスワード < ログインで必要
- サーバー名 < サーバーのページを開くのに必要
- チャンネル名 < チャンネルのページを開くのに必要
以上の設定データを、コンフィグファイルかコマンドオプションで渡せるようにすることにしました。
とりあえずソースコードを書いてみる
以下が、完成した簡単なソースコードとなります。
chromedpの他に、jinzhu/configorという設定ファイルを読み込むためのパッケージも利用しました。
あと、以下の記事を参考にさせていただきました。
使い方
まずは、ソースコードをビルドします。
申し訳ないですが、環境がMacという前提で進めます
$ go build -o ./app ./main.go
ビルドすると./app
という実行ファイルが作成されるので、そのままファイルを以下のように実行します。
$ ./app -message="メッセージ内容" -server="サーバー名" -channel="チャンネル名"
message
server
channel
というオプションで、メッセージの送信対象や内容を指定できるようにしています。
上記を実行したら、何秒か経過した後に無事にメッセージが送られていることが確認できました。
スクリーンショットもchromedpで撮るように設定していたのですが、スクショもちゃんと保存されていました。
chromedpの感想
chromedp以外にも、NodeJSだとPuppeteerや、PythonだとScrapyのSplashなどのお手軽なパッケージがあるのですが、Go言語でここまで簡単にブラウザ操作ができてしまうのは魅力的だなと思いました。
今回は、Discordでのメッセージを自動化するという、しょうもないことで利用しましたが、他にも色々な使い方がありそうなので、もっとGo言語を使いこなせる方なら、いろんなことを自動化できたりするんじゃないでしょうか?
あと、作成したツールは、MacのAutomatorを利用して、無事挨拶メッセージを自動化することができました(笑)
以下リポジトリとなります。
Discussion