Discord
概要
Discord は、Minecraft サーバーを Discord サーバーに接続します。Discord に送られるものはすべて、再利用可能な 1 つのオブジェクト、Webhook デスティネーション(Discord チャンネルの URL、名前、アバター)を使います。これを一度宣言すれば、すべての機能から参照されます。チャンネルを変えたいときは、1 つのエントリを編集するだけです。
この拡張機能は 6 つの役割を担います。ランクとロールの同期を伴うアカウント連携、双方向のチャット中継、Discord からサーバーコマンドを実行するコンソールチャンネル、ゲーム内のバグ報告システム、ショップの取引通知、そして TypeWriter のファクトが変化したときに発行される Webhook です。各機能は独立したエントリなので、使うものだけを設定すれば済みます。Discord は TypeWriter の他の部分にとっては任意です。link manifest がなければ、Discord ボットは起動しません。
この拡張機能は、バージョン 0.9 まで Community という名前でした。エントリ名は変わっておらず、名称変更前に作成されたページは初回起動時に変換されます。
機能
- Webhook デスティネーション — Discord チャンネルごとに 1 エントリ(URL、ユーザー名、アバター、常時ロールメンション)。すべての機能で共有されます。
- アカウント連携 — プレイヤーがコマンドでコードを取得し、Discord のチャンネルに入力するとアカウントが連携されます。Discord のロールは Minecraft のグループに連動します。
- チャット同期 — Minecraft のチャットと参加/退出メッセージが Discord に送られ、Discord のメッセージもゲーム内に戻せます。
- コンソールチャンネル — スタッフが Discord チャンネルからサーバーコマンドを実行できます。コマンドリスト、ロール制限、ログファイルに対応します。
- バグ報告 — ゲーム内のダイアログフォーム。ステータス管理付きで保存され、Embed またはフォーラムスレッドとして Discord に投稿され、Discord のスラッシュコマンドから管理できます。
- ショップの通知 — 購入と販売が、各ショップが指定するチャンネルに投稿されます(Shops 拡張機能が必要です)。
- ファクト Webhook — TypeWriter のファクトが変化したとき、プレイヤーごと、グループごと、またはグローバルにメッセージを送ります。
- 自動移行 — 0.9 より前のページにあるインライン Webhook は、Webhook デスティネーションに変換されます。
インストール
- 使いたいチャンネルで Discord の Webhook を作成します。Discord で チャンネルの設定、連携サービス、ウェブフック、新しいウェブフック の順に進み、URL をコピーします。Webhook、バグ報告、一方向のチャットであれば、これで十分です。
- アカウント連携、Discord から Minecraft へのチャット中継、コンソールチャンネル、スラッシュコマンドには、Discord のボットも必要です。Discord Developer Portal でボットを作成してトークンをコピーし、サーバーに招待して、Bot の下で Server Members Intent と Message Content Intent を有効にします。この拡張機能はこれらのインテントを要求するため、有効にしないと接続できません。
- TypeWriter の Basic 拡張機能がインストールされていることを確認します(TypeWriter ドキュメントを参照)。
- Discord の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。JAR には、ボットに使う JDA ライブラリがすでに含まれています。 - ショップの通知を使う場合は、Shops 拡張機能もインストールします。
バグ報告は Paper のダイアログ画面を使うため、Paper 1.21.6 以降が必要です。
はじめに
アカウントを連携し、バグ報告をスタッフ用チャンネルに投稿する手順です。
- TypeWriter の Web パネルで manifest ページを開き、Webhook Definition を追加します。チャンネルの URL を
urlに貼り付け、必要に応じてusernameとavatarUrlを設定します。 - 同じページに Discord Link Storage アーティファクトを追加します。連携情報と保留中のコードを保存します。
- Discord Link Manifest を追加します。
storageにアーティファクトを、webhookにデスティネーションを設定し、botを有効にして、botTokenとguildIdを入力します。verificationChannelIdには、プレイヤーがコードを入力する Discord チャンネルを設定します。 - 任意: Minecraft のグループに応じて Discord のロールを付与するには、
roleMappingsを入力します。例:minecraftGroupにvip、discordRoleIdに Discord のロール ID。 - Bug Report Sequence Storage アーティファクトを追加し、続いて Bug Report Manifest を追加します。
commandName(例:bugreport)、sequenceStorage、serverNameを設定し、categoriesに少なくとも 1 つのエントリを追加して、keyがdescriptionの入力を持たせます。webhookのdestinationには、作成したデスティネーションを設定します。 - パブリッシュします。プレイヤーが
/discordlinkを実行してコードを取得し、認証チャンネルに入力すると連携されます。/bugreportを実行すると、フォームが開きます。
Discord のチャンネル ID またはロール ID を取得するには、Discord の詳細設定で開発者モードをオンにし、チャンネルまたはロールを右クリックして IDをコピー を選びます。
仕組み
送信には Webhook を使い、ボットは不要です。Discord からの受信にはボットが必要で、ボットは Discord Link Manifest でのみ設定します。ボットが有効でない場合、Discord から Minecraft へのチャット中継、コンソールチャンネル、バグ報告のスラッシュコマンドは何も行いません。
デスティネーションが空であるか無効であることは、何も送信しないための通常の方法です。すでに存在しないデスティネーションへの参照は、Destination '…' not found; message dropped としてログに記録されます。
設定
この拡張機能は Web パネルで設定します。連携データとバグ報告は、作成したアーティファクトエントリに保存されます。これらのほかに、次のものが書き込まれます。
| ファイル | 内容 |
|---|---|
logs/discord-console.log | コンソールチャンネルから実行されたコマンド(サーバールートからの相対パス。パスはエントリのフィールドです)。 |
backup/community-webhook-v1/ | Community からの移行で書き換えられたページのバックアップ(Typewriter フォルダ内)。 |
Community からの移行
0.9 より前のページは、Webhook を各 manifest の内部に保存していました。初回起動時に、拡張機能はデスティネーションごとに 1 つずつ Webhook Definition を作成し、manifest がそれを指すようにして、書き換える前に各ページをバックアップします。その後、/typewriter reload を一度実行するよう求めます。
コマンド
以下のコマンドは、manifest エントリによって登録されます。コマンド名はそれらのエントリのフィールドで、デフォルト値を示しています。
| コマンド | 説明 |
|---|---|
/discordlink | 認証コードを生成します。保留中のコードがあれば、それを再表示します。プレイヤー専用です。 |
/discordlink unlink | 連携と、対応付けられた Discord ロールを削除します。 |
/bugreport | カテゴリ選択を開き、続いて報告フォームを開きます。 |
/bugreport mine | 自分の報告を一覧表示します。 |
/bugreport list [player] | 報告を一覧表示します。特定のプレイヤーの報告に絞ることもできます。admin 権限が必要です。 |
/bugreport status <reportId> <statusId> | 報告のステータスを変更します。admin 権限が必要です。 |
/bugreport delete <reportId> | 報告を削除します。admin 権限が必要です。 |
discordCommands がオンの場合、Bug Report Manifest は Discord サーバーにもスラッシュコマンドを登録します。名前は commandName と同じで、list、status、delete を持ちます。使えるのは、Discord の管理者、または discordAdminRoleIds に含まれるロールを持つメンバーだけです。
これらのスラッシュコマンドを登録すると、このボットがサーバーに持っている他のスラッシュコマンドは置き換えられます。
権限
すべての権限はエントリのフィールドで、変更できます。デフォルト値は次のとおりです。
| 権限 | 許可される内容 |
|---|---|
discordlink.notify | プレイヤーがアカウントを連携したときにメッセージを受け取ります(notifyPermission。空にすると無効)。 |
bugreport.notify | 報告が送信されたときにメッセージを受け取ります(notifyPermission)。 |
bugreport.admin | /bugreport list、status、delete を使用します(adminPermission)。 |
group.<group> | ロールマッピングに対応します。グループが通過した最初のマッピングが、プレイヤーの Discord ロールになります(groupPermissionFormat)。 |
エントリ
9 件のエントリー(拡張機能のソースから生成)。
イベント1
- Webhook Fact EventPublish a Discord webhook when a Typewriter fact changes
コマンド2
- Bugreport ManifestConfigure bug report behaviour
- Discord Link ManifestConfigure Discord linking and role synchronization
アーティファクト2
- Bugreport Sequence StorageBug report sequence storage
- Discord Link StorageDiscord link storage
マニフェスト4
- Chat Sync ManifestConfigure Minecraft to Discord chat synchronization
- Console Channel ManifestConfigure Discord console channel
- Shop Notification ManifestFormat shop transactions announced on Discord
- Webhook DefinitionA reusable Discord webhook destination
トラブルシューティング
ボットが接続できない。 コンソールに Failed to connect Discord Bot または Discord Bot is disabled or token is missing と表示されます。bot が有効で botToken が正しいこと、Developer Portal で Server Members と Message Content のインテントがオンになっていることを確認してください。guildId はサーバーの ID でなければなりません。間違っていると guild not found と表示されます。
/discordlink で連携が設定されていないと表示される。 パブリッシュ済みのページに Discord Link Manifest がありません。コンソールには discord_link_manifest not found; Discord link is disabled と表示されます。
Discord で入力したコードが無視される。 プレイヤーは、verificationChannelId に設定されたチャンネルに、コードだけを、ちょうど codeLength 文字の英数字で入力する必要があります。ボットはチェックマークまたはバツ印でリアクションします。期限切れのコード(codeValidityMinutes)や、すでに連携済みの Discord アカウントは拒否されます。連携済みのプレイヤーも、autoOverwriteExistingLink がオンでない限り拒否されます。
バグ報告コマンドでカテゴリがないと表示される。 categories はデフォルトでは空です。カテゴリを少なくとも 1 つ追加してください。報告は、title または description の入力が埋められている場合にのみ受け付けられます。title の入力はフォームが自動的に追加するため、メッセージ用に、キーが description の入力を追加してください。
バグ報告が Discord に拒否される。 threadNameTemplate はフォーラムチャンネル向けです。デスティネーションが通常のテキストチャンネルの場合は、テンプレートを空にしてください。コンソールには、理由とともに Webhook '…' rejected with HTTP … と表示されます。
コンソールコマンドが何も実行されない。 コンソールチャンネルにはボットが必要で、discordChannelId のチャンネル ID が一致している必要があります。ブロックされたコマンドには進入禁止のリアクションが、権限のないメンバーにはバツ印が付きます。デフォルトでは、commandList は stop、restart、reload を含むブラックリストです。より安全にするには、blacklistIsWhitelist に切り替え、allowedRoles を制限してください。
ショップの販売が通知されない。 Shop Notification Manifest が必要です(ないと何も送信されません)。また、ショップ定義の notificationWebhookId に、Webhook Definition エントリの ID を使ってデスティネーションを指定する必要があります。Shops 拡張機能もインストールされている必要があります。
関連する拡張機能
- Shops — ショップが、取引を通知する Webhook Definition を指定します。