#記事を書いた経緯
- 自分用のメモ感覚
- DiscordのBotを自作した記事はたくさんあったが、Goで自作した記事 と Go×Heroku×Discordの記事という2つの条件を満たす記事が少なかったため
#この記事の対象者
- Go言語の基礎は分かる
- Go言語でオリジナルのDiscordのBotを自作したい
※自作したBotのソースコードを全部載せるつもりはないので、どんな風に書けば良いかはググってみてください。
#準備〜導入までのプロセス
- Herokuのアカウント作成
- DiscordのBotアカウントを作成 ※作り方は別の方の記事を参照
- コードを書く ※今回利用した外部パッケージ
- Botを常駐化させるために、プログラムをサーバー上で動かす(EC2とかGCEに乗せてもいいけど、今回はHerokuを採用)
#プロセスの一部をもうちょっと詳しく
プロセスの1と2は、たくさん記事があるのでここで説明する必要はないかなと思います。
3. コードを書く について
今回利用させていただいた外部パッケージは、「DiscordGo」というパッケージです。
簡単に説明すると、DiscordGoパッケージ内に定義されている関数を呼び出すだけで、定義された関数に応じてDiscordのAPIを呼び出すことが出来る、Go言語向けに作成されたパッケージです。
DiscordGoの詳細はリンク先参照。
コードのサンプルは、discordgo/examples/pingpong/ とか discordgo/examples/airhorn/ が参考になるかなと思います。
4. Botを常駐化させるために、プログラムをサーバー上で動かす について
大前提として、無料でBotを常駐化させたいという思いがありました。
なので、EC2でもGCEでも良かったのですが、EC2は以前Minecraftのサーバーを建てた時に使ったので今回はスルーして、GCPかHerokuかの選択肢でした。
そして今回はBot(アプリケーション)を動かすだけだったので、HerokuのDynoを採用しました。
※Dynoの無料枠がクレカ未登録で550h/月、クレカ登録後で1000h/月です。クレカ未登録では1ヶ月フル稼働は出来ないことに注意。
今回はGoで書いたアプリをGithubにあげて、GithubとHerokuを連携して自動デプロイ出来る環境を整えました。
やり方としては、コチラの記事を参考に進めてください。
今回僕が用意したファイルは、以下4つの最低限だけです。
- Procfile
- README.md
- main.go
- go.mod
各ファイルの中身は以下のような感じです。
worker: discord_bot_atsumori
// githubのリポジトリの説明欄に表示したい文章を書いてください
package main
import (
"fmt"
"github.com/bwmarrin/discordgo"
"os"
"os/signal"
"syscall"
)
const (
TOKEN = "YOUR TOKEN"
...
...
...
module github.com/Satoshi-sts/YOUR_REPOSITORY
go 1.13
require github.com/bwmarrin/discordgo v0.20.3
あとはWebUIもしくはターミナルなどでコマンドを叩いてDynoを起動すれば完了です。
#最後に
作業が完了した後にこの記事を書いたので、もしかしたら抜けてる部分があるかもしれません...。
その時はごめんなさい、コメントで教えていただけるとありがたいです。
お疲れ様でした。