忍者ブログ

Chiudesu.works

Discordのbotつくる

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

Discordのbotつくる

この記事は OUCC Advent Calendar 2016 の23日目の記事だったと思います。
前はsuuhitoさんの 2016年の振り返り でした。

Discordを使い始めました。通話できるslackです。
slackとかでやったことがなかったので、botを作ってみたくなりました。


git・node・npmは入っている前提で、hubot、hubot-discord、herokuの話をします。
それから、さすがにpingpongまででは記事力がなさすぎるのでdiscordjsには触れときます。
(postgresまでやりたかったがまだできてないし長文になる)

YO! hubot

hubotプロジェクトを作ります。hubotはbotつくるのに便利なツールです。
hubot-discordはhubotをDiscordに対応させるアダプターです。これも一緒にインストールします。

https://hubot.github.com/docs/
https://github.com/thetimpanist/hubot-discord
http://qiita.com/shy_azusa/items/00dda0eab8d435d3cdce
このへんを参考に
プロジェクトを作りたいフォルダに移動してから
> npm install -g yo generator-hubot hubot-discord
> yo hubot
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner chiudesu <chiudesu@gmail.com>
? Bot name testbot
? Description
? Bot adapter discord

> git init
> git add .
> git commit -m "first commit"

できた内のpackage.json編集
"engines": {
    "node": "0.10.x"
}

"node": "4.1.X"にします。(もっと新しくてもいいはず)
というのもhubot-discordがv4以降の関数(startsWith)を使っているのでした。

heroku用ツールいんすこ

herokuはいわゆるPaaSです。
アカウントを作ったら手元からherokuを扱えるツールをインストールします。
https://devcenter.heroku.com/articles/getting-started-with-nodejs#set-up

> heroku login
> heroku create testbot-workspace
> git push heroku master

また、
> heroku open
でwebに飛べます。

ところで、herokuは必ずしも無料じゃないですね。
https://www.heroku.com/pricing
 Verified accounts come with a monthly pool of 1000 Free dyno hours; unverified accounts receive 550. When a Free dyno is active, it draws from the pool; your free apps can run as long as there are dyno hours left in your monthly pool.
クレジットカード登録済みアカウントなら24時間稼働しても問題ないはずですが、
そうでないなら何時間か休ませる必要があります。
hubotに入っているhubot-heroku-keepaliveの機能を使うため、herokuの環境変数を設定します。
> heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=herokuのアドレス
> heroku config:set HUBOT_HEROKU_WAKEUP_TIME=5:00  ←HH:MMただしUTC時間
> heroku config:set HUBOT_HEROKU_SLEEP_TIME=14:00  ←HH:MM
タイムゾーンを合わせる場合は、
> heroku config:set TZ=Asia/Tokyo

ついでにheroku上のアプリは30分なにもしないと止まるので
> heroku config:set HUBOT_HEROKU_KEEPALIVE_INTERVAL=5  ←30未満

Discordにbotを登録する

Discordのページからアプリを作成します。
https://discordapp.com/developers/applications/me
Public Bot, Require ... のチェックはなにもなくても動きます。
REDIRECT URI(S)にはherokuのアドレスをコピペします。
 例:https://dashboard.heroku.com/apps/testbot-workspace

表示されたトークンを見ながらherokuの環境設定をします。
> heroku config:set HUBOT_DISCORD_TOKEN="表示されたトークン"

それから↓に移動して稼働させたいサーバに登録すれば完了です。
https://discordapp.com/oauth2/authorize?client_id=表示されたClient ID&scope=bot

動く

botにDMでpingと打つとPONGが返ってきます。hubotのデフォルト機能です。
DMじゃなくてもbotname pingで反応しますし、botname: pingとかでも反応します。
が 、@botname にしてしまうとDiscordでは @botname#1234 に変換されるので反応しないです。
issue : https://github.com/thetimpanist/hubot-discord/issues/46

スクリプトを書く

scripts/example.coffee を弄ってみます。

module.exports = (robot) ->
    robot.hear /もこ/i, (res) ->
        res.send "もこもこ"
hearで登録した関数はコメント頭にbotnameがつかなくても反応します。


module.exports = (robot) ->
    robot.respond /repeat (.*)/i, (res) ->
        res.send "#{res.match[1]}"
        dclient = res.robot.adapter.client
        dclient.getMessage res.message.room, res.message.id, (err, dmsg) ->
            for att in dmsg.attachments then res.send "#{att.url}"
respondで登録した関数はコメント頭にbotnameがつく時か、DMで反応します。


2つ目のrepeatコマンドでは、コメントだけでなく添付画像のURLも取得して返します。
discordjsのMessageオブジェクトには添付のデータもついてきますが、hubotから送られてくるresの中身はdiscordjsのMessageとは別物なので、メッセージIDからgetMessageでMessageオブジェクトを取り直します。
http://discordjs.readthedocs.io/en/8.1.0/

おわりに

discordjsのClientオブジェクトを取得できるのでDiscord APIの大抵のことはできるでしょう。
hubotもherokuもcoffeescriptも初めてだったんで楽しかった(小並感)。ソース読むの速くなりたい。
postgresはまたの機会で。

使用したバージョンは
- node v4.1.1
- hubot-discord v1.3.0
- discordjs v8.1.0
でした。(discordjsはhubot-discordについてきます)



疑似タグ...≪node≫
PR

コメント

プロフィール

HN:
ちうです
性別:
非公開
自己紹介:
ゲームクリエイター志望 妹紅の隣でプログラム・イラスト・作曲・3Dモデリング諸々練習中

リンク

ちうですのリンク






外部リンク