Skip to content

cykps/zirconia

Repository files navigation

icon

Zirconia

スラッシュコマンドへのシンプルな返答、じゃんけん、ダイス、ガチャ機能を備えたDiscordボットです

セットアップ

0. 事前に必要なもの

1. Discord・Cloudflareの設定

  • 1.1 Discordボット用のアプリケーションの作成・ボットのサーバーへ追加
    • 公式ドキュメントCreating an app on DiscordAdding bot permissionsに従い、ボット用のアプリケーションを作成、ボットをサーバーへ追加する
  • 1.2 .dev.varsにsecrets(機密情報)を保存
    • 1.2.1 プロジェクトのルート(package.json.gitignoreと同じ階層)に.dev.varsという名前のファイルを作成
    • 1.2.2 .dev.varsに以下の形式でsecretsを保存
DISCORD_TOKEN="{手順1.1で取得したトークン}"
DISCORD_PUBLIC_KEY="{手順1.1で取得したパブリックキー}"
DISCORD_APPLICATION_ID="{手順1.1で取得したアプリケーションID}"

例:

DISCORD_TOKEN="YBNJRT3brLJM_VLiGkT46QkJDxhxu.YKVpl6R2Lc01_pVOgJhMVxF6KK0ext"
DISCORD_PUBLIC_KEY="8ad013a56d5b1225675dad1a6ecc72ed2c8788465e4fa3bb8555e"
DISCORD_APPLICATION_ID="141320486770036847239"

2. ローカル環境で動作確認をする

  • 2.1 依存関係のインストールのため、以下のコマンドを実行 (初回のみ)
    • npm install
  • 2.2 サーバーを起動
    • npm run start
  • 2.3 HTTPトンネルを起動
    • ローカルで動いているボットサーバーにDiscordからアクセスできるようにするため、HTTPトンネルを使用
    • 2.2とは別のシェルで npm run tunnel を実行
    • 表示されるURLをコピーしておく
  • 2.4 DiscordアプリケーションにURLを登録
    • 2.4.1 My Applications | Discord Developer Portalから、1.1で作成したアプリケーションを選択
    • 2.4.2 Interactions Endpoint URL2.3で表示されたURLをコピペする
    • Save Changesを押し、URLが正常に保存され、緑色でAll your edits have been carefully recorded.と表示されることを確認
  • 2.5 Discordでスラッシュコマンドなどを使用し、ボットが正常に動作することを確認
  • 参考: 公式ドキュメント

3. 手動でCloudflare Workersにデプロイ

  • 3.1 wranglerでDiscordのsecretsを保存
    • 1.1で取得したトークン、パブリックキー、アプリケーションIDをそれぞれ以下のコマンドでwranglerに登録
    • (wranglerの初回実行時はブラウザを使った認証が行われる)
      • トークン: wrangler secret put DISCORD_TOKEN
      • パブリックキー: wrangler secret put DISCORD_PUBLIC_KEY
      • アプリケーションID: wrangler secret put DISCORD_APPLICATION_ID
    • 参考: 公式ドキュメント
  • 3.2 Discordへのスラッシュコマンドの登録とCloudflare Workersへのデプロイ
    • 以下のコマンドを実行
      • npm run deploy:full
      • Workersを新規作成するか問われるため、作成を承認する (初回のみ)
  • 3.3 表示されたURL(https://{Worker名}.{アカウント名}.workers.devという形式)を、2.4の手順でDiscordアプリケーションに登録 (初回のみ)
  • 3.4 Discordでスラッシュコマンドなどを使用し、ボットが正常に動作することを確認
  • 参考: 公式ドキュメント

4. GitHub Actions経由でCloudflare Workersにデプロイ (オプション)

  • 4.1 Cloudflare Account ID の取得

  • 4.2 APIトークンの取得

  • 4.3 GitHubレポジトリにSecretsを登録

    • 4.3.1 ブラウザでGitHubリポジトリを開く
    • 4.3.2 SettingsSecurity and qualityカテゴリのSecrets and variablesActionsに移動
    • 4.3.3 Repository secretを作成
      • 4.3.3.1 Cloudflare Account ID
        • Name: CF_ACCOUNT_ID
        • Secret: 4.1で取得したCloudflare Account ID
      • 4.3.3.2 APIトークン
        • Name: CF_API_TOKEN
        • Secret: 4.2で取得したAPIトークン
      • 4.3.3.3 Discordトークン
        • Name: DISCORD_TOKEN
        • Secret: .dev.varsDISCORD_TOKENをコピペ
      • 4.3.3.4 DiscordアプリケーションID
        • Name: DISCORD_APPLICATION_ID
        • Secret: .dev.varsDISCORD_APPLICATION_IDをコピペ
  • 4.4 GitHub Actionsを実行

    • 4.4.1 GitHub Actionsによりワークフローが実行されることで、Cloudflare Workersにボットがデプロイされる
      • 方法1: GitHubのmainブランチに新たなコミットをする
        • (mainブランチへのコミットごとに、ワークフローが実行される)
      • 方法2: ブラウザでGitHubリポジトリを開き、Actionsから最新のワークフローを選択し、再実行(Re-run)をする
    • 4.4.2 ワークフローが正常に実行されたかを確認
      • ブラウザでGitHubリポジトリを開き、 Actionsから最新のワークフローが正常に完了しチェックマークが付いているか確認
  • 4.5 WorkerのURL(https://{Worker名}.{アカウント名}.workers.devという形式)を、2.4の手順でDiscordアプリケーションに登録

  • 4.6 Discordでスラッシュコマンドなどを使用し、ボットが正常に動作することを確認

  • 参考: 公式ドキュメント

設定

各機能の設定はsrc/config.jsで変更できます。各設定のenablefalseにすると、その機能を無効化できます。

表示メッセージの形式

表示メッセージには、テキスト、配列、関数を指定できます。これらの値はgenerateMessage(formatter, props)で次のように処理されます。

指定する値 挙動
テキスト 指定したテキストをそのまま表示
配列 配列内の要素を1つランダムに選んで表示。要素にはテキスト、配列、関数を指定可能
関数 メッセージ生成時の値を引数として受け取り、関数が返したテキストを表示

たとえば、固定メッセージはmessage: 'hallo'、ランダムなメッセージはmessage: ['表', '裏']のように設定します。関数を使うと、実行結果に応じたメッセージを生成できます。

message: ({ interaction }) => {
  return `${interaction.member.user.username}さん、こんにちは`;
},

ユーザーにメンションする場合は、Discordのメンション形式<@ユーザーID>を返します。コマンドを実行したユーザーにメンションする例は次のとおりです。

message: ({ interaction }) => {
  return `こんにちは <@${interaction.member.user.id}>`;
},

サーバーのカスタム絵文字やアプリケーションのカスタム絵文字は、Discordのカスタム絵文字形式<:絵文字名:絵文字ID>をメッセージに含めます。アニメーション絵文字の場合は<a:絵文字名:絵文字ID>です。

message: 'こんにちは <:icon:123456789012345678>',

テキスト、配列、関数を指定できる設定項目は次のとおりです。

設定 対応する項目
SIMPLE_REPLY_CONFIG replies[].message
JANKEN_CONFIG messages.startmessages.resultmessages.drawmessages.botWinmessages.userWinmessages.notGameOwnermessages.invalidButton
DICE_CONFIG messages.resultmessages.invalidOption
GACHA_CONFIG gachas[].choices[].messagemessages.invalidWeight

関数を指定した場合、項目ごとに次の値を引数のオブジェクトから参照できます。

対応する項目 参照できる値
SIMPLE_REPLY_CONFIG.replies[].message interaction
JANKEN_CONFIG.messages.startmessages.invalidButtonmessages.notGameOwner interaction
JANKEN_CONFIG.messages.resultmessages.drawmessages.botWinmessages.userWin userHandbotHandinteraction
DICE_CONFIG.messages.result rollsareRollsTruncatedtotaldiceCountdiceSidesrollsRawinteraction
DICE_CONFIG.messages.invalidOption interaction
GACHA_CONFIG.gachas[].choices[].message interactiongachadrawnChoice
GACHA_CONFIG.messages.invalidWeight interaction

SIMPLE_REPLY_CONFIG

スラッシュコマンドに対して、固定メッセージまたはランダムなメッセージを返す機能の設定です。

項目 説明
enable 機能の有効・無効
replies コマンドと返答の定義

repliesの各要素には、以下の項目を設定します。

項目 説明
name コマンド名
description コマンドの説明
message 表示メッセージ。テキスト、配列、関数を指定可能

JANKEN_CONFIG

じゃんけん機能の設定です。

項目 説明
enable 機能の有効・無効
commandName コマンド名
description コマンドの説明
hands 手の定義
messages 表示メッセージ。各項目にはテキスト、配列、関数を指定可能
maxRound 最大ラウンド数

DICE_CONFIG

さいころ機能の設定です。

項目 説明
enable 機能の有効・無効
commandName コマンド名
description コマンドの説明
countOption さいころの個数を指定するオプション名
countOptionDescription さいころの個数を指定するオプションの説明
maxDiceCount 一度に振れるさいころの最大個数
sidesOption さいころの面数を指定するオプション名
sidesOptionDescription さいころの面数を指定するオプションの説明
maxDiceSides 指定できるさいころの最大面数
maxVisibleRolls メッセージに表示する出目の最大数
messages 表示メッセージ。各項目にはテキスト、配列、関数を指定可能

GACHA_CONFIG

ガチャ機能の設定です。

項目 説明
enable 機能の有効・無効
gachas ガチャの定義
messages 表示メッセージ。各項目にはテキスト、配列、関数を指定可能

gachasの各要素には、以下の項目を設定します。

項目 説明
name コマンド名
description コマンドの説明
choices 抽選する選択肢の定義

choicesの各要素には、表示するmessageと抽選時の重みとなる正の整数weightを設定します。weightが大きいほど出やすくなります。例えばweight: 10weight: 2の5倍出やすくなります。 messageにはテキスト、配列、関数を指定できます。

リンク

ドキュメント

レポジトリ

About

🤖A Discord bot with simple repliy, janken, dice and gacha commands

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors