メインコンテンツまでスキップ

Discord

サーバーと Discord の間でアカウント連携、チャット中継、コンソールチャンネル、バグ報告、Webhook を提供します。

無料v0.13連携
必要TypeWriter0.9Basic extensionPaper1.21.6+任意Shops任意

概要​

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 デスティネーションに変換されます。

インストール​

  1. 使いたいチャンネルで Discord の Webhook を作成します。Discord で チャンネルの設定、連携サービス、ウェブフック、新しいウェブフック の順に進み、URL をコピーします。Webhook、バグ報告、一方向のチャットであれば、これで十分です。
  2. アカウント連携、Discord から Minecraft へのチャット中継、コンソールチャンネル、スラッシュコマンドには、Discord のボットも必要です。Discord Developer Portal でボットを作成してトークンをコピーし、サーバーに招待して、Bot の下で Server Members Intent と Message Content Intent を有効にします。この拡張機能はこれらのインテントを要求するため、有効にしないと接続できません。
  3. TypeWriter の Basic 拡張機能がインストールされていることを確認します(TypeWriter ドキュメントを参照)。
  4. Discord の JAR を plugins/Typewriter/extensions/ に置き、サーバーを再起動します。JAR には、ボットに使う JDA ライブラリがすでに含まれています。
  5. ショップの通知を使う場合は、Shops 拡張機能もインストールします。

バグ報告は Paper のダイアログ画面を使うため、Paper 1.21.6 以降が必要です。

はじめに​

アカウントを連携し、バグ報告をスタッフ用チャンネルに投稿する手順です。

  1. TypeWriter の Web パネルで manifest ページを開き、Webhook Definition を追加します。チャンネルの URL を url に貼り付け、必要に応じて username と avatarUrl を設定します。
  2. 同じページに Discord Link Storage アーティファクトを追加します。連携情報と保留中のコードを保存します。
  3. Discord Link Manifest を追加します。storage にアーティファクトを、webhook にデスティネーションを設定し、bot を有効にして、botToken と guildId を入力します。verificationChannelId には、プレイヤーがコードを入力する Discord チャンネルを設定します。
  4. 任意: Minecraft のグループに応じて Discord のロールを付与するには、roleMappings を入力します。例: minecraftGroup に vip、discordRoleId に Discord のロール ID。
  5. Bug Report Sequence Storage アーティファクトを追加し、続いて Bug Report Manifest を追加します。commandName(例: bugreport)、sequenceStorage、serverName を設定し、categories に少なくとも 1 つのエントリを追加して、key が description の入力を持たせます。webhook の destination には、作成したデスティネーションを設定します。
  6. パブリッシュします。プレイヤーが /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
コマンド2
アーティファクト2
マニフェスト4

トラブルシューティング​

ボットが接続できない。 コンソールに 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 を指定します。