背景
herokuが有料化してからDiscordで無料で常に動かす方法がわからない
調べてみたら方法あるっぽいけど、/roll
とかの入力が必要だったりして面倒
なによりBCDiceが最強なので使いたい
やること
GlitchにBCdiceBotをおいてNode.jsで動かす
(Javaを永続的に動かす方法がNode.js使う以外に分からなかったんです!!)
前提
中級者以上向け:heroku を使って動かす手順
↑で詰んだ人とか
Q.Botを常に起動していたい
↑で詰んだ人はこれで導入できる
トークン取得とか終わってる前提
ローカルで設定
- discord-bcdicebotの概要からダウンロード
-
start.sh
のDISCORD_BOT_TOKEN=
を削除 -
start.sh
のBCDICE_API_URL=
を設定。BCDice-API バージョン一覧から好きなURLを選ぶ - そのほか
start.sh
を好きに設定 - コマンドラインで
$ npm init
を叩く- 出てくる選択肢は自由。面倒なら無視してEnter連打でOK
- npmなんか知らねぇと言われたらダウンロードサイトからぶち込みましょう
- 作成された
package.json
を編集。start
を追加
package.json
{
"scripts": {
"start": "sh start.sh"
},
}
- GitHubにpushする
Glitchで動かす
https://glitch.com/
ここにボットを設置する
ここではGitHubを使うが他の方法でも良い
- 画面右上の「New Project」をクリック
- 「import from GitHub」を選択
- URLは自分のリポジトリ
- 環境変数の設定をする
- ここはdiscord-bcdicebotを読みつつ
.env
に記述-
.env
のAdd a variable
で追加する - Glithの
start.sh
に公開しておくとセキュリティ上よくないので.env
に入れて隠す必要がある
-
-
DISCORD_BOT_TOKEN=
を消していたのでここで設定する - 参考までに私が設定した環境変数はこんな感じ
DISCORD_BOT_TOKEN={token} BCDICE_API_URL=https://bcdice.onlinesession.app BCDICE_API_SECONDARY=https://bcdice.trpg.net BCDICE_MENTION_MODE=1
- ここはdiscord-bcdicebotを読みつつ
- 画面下のターミナルをクリックして開く
-
$ npm start
する
GASでGlitchの永続化
Glitchは一定時間アクセスがないと死んでしまう
定期的にGASにアクセスさせて蘇生することにより永遠の命を手にする
GlitchでBOTを作る手順を参考にした
- Glitchの画面下の「Preview」から「Preview in a new window」を選択
- 開いたウィンドウのURLをコピーしておく
- Googleドライブを開く
- 画面左の「+新規」をクリック
- 「その他」→「GoogleAppScript」を選択
- GlitchにPOSTするだけの関数を書く
const retainGlitch = () => {
const data = {}
const headers = { 'Content-Type': 'application/json; charset=UTF-8' }
const params = {
method: 'post',
payload: JSON.stringify(data),
headers: headers,
muteHttpExceptions: true
}
//特に中身のないデータをGlitchへPOST
response = UrlFetchApp.fetch('/* コピーしておいたURL */', params);
}
- 保存
- 左側の時計のアイコンの「トリガー」をクリック
- 「+トリガーを追加」でこのように設定して保存
- 実行する関数:retainGlitch
- 実行するデプロイを選択:Head
- イベントのソースを選択:時間主導型
- 時間ベースのトリガーのタイプを選択:分ベースのタイマー
- 時間の間隔を選択(分):1分おき
完成!!
Discordで動作確認してみよう
ダイスを振るのじゃ
困ったことがあったら
chatGPT君に聞くと全部答えてくれるよ。