2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BCDiceをDiscordのダイスボットにして動かす

Last updated at Posted at 2023-06-26

背景

herokuが有料化してからDiscordで無料で常に動かす方法がわからない
調べてみたら方法あるっぽいけど、/rollとかの入力が必要だったりして面倒
なによりBCDiceが最強なので使いたい

やること

GlitchにBCdiceBotをおいてNode.jsで動かす
(Javaを永続的に動かす方法がNode.js使う以外に分からなかったんです!!)

前提

中級者以上向け:heroku を使って動かす手順

↑で詰んだ人とか

Q.Botを常に起動していたい

↑で詰んだ人はこれで導入できる
トークン取得とか終わってる前提

ローカルで設定

  • discord-bcdicebotの概要からダウンロード
  • start.shDISCORD_BOT_TOKEN=を削除
  • start.shBCDICE_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に記述
      • .envAdd 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
      
  • 画面下のターミナルをクリックして開く
  • $ 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君に聞くと全部答えてくれるよ。

参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?