グローバルチャット詳細仕様
グローバルチャット機能は、ここなつBotを導入している異なるDiscordサーバーのチャンネル同士を裏側で繋ぎ、サーバーの垣根を超えてリアルタイムでチャットができる機能です。
単なる「メッセージの転送」にとどまらず、Discordの標準機能(返信、編集、削除、ステッカー)を別サーバーでもシームレスに再現するための高度な同期システムを備えています。
1. メッセージ転送の裏側の仕組み (Webhook Relay)
あるサーバー(A)でユーザーが発言すると、ここなつBotは接続されている他の全てのサーバー(B, C...)のチャンネルに設定されたWebhook(「GlobalRelay」という名前で自動生成されます)を利用してメッセージを送信します。
送信者情報の偽装と表示
- 名前:
ユーザーの表示名(所属サーバー名)という形式で最大50文字まで合成され、Webhookの名前として設定されます。 - アイコン: 送信者のDiscordアバター画像がそのままWebhookのアイコンとして使用されます。
- これにより、別のサーバーにいるユーザーからは**「まるで本人がそのサーバーにいるかのように」**自然なチャットとして見えます。
添付ファイルとステッカーの対応
- 画像・ファイル: 10MB以下の添付ファイル(画像、動画、文書など)は、Botが一度メモリにダウンロードしてから各サーバーへ再アップロードして転送されます。
- ステッカー: Discordの標準ステッカーは画像(PNG/APNG)であればURLとして本文に追記して転送されます。ただし、動くアニメーションスタンプ(Lottie / .json 形式)はDiscordの使用上転送できないためスキップされます。
- ファイルと本文が両方とも空(Lottieスタンプのみ送信した場合など)は転送されず、元メッセージに ❌ リアクションが付与されます。
送信者情報の特定機能 (右クリック・コンテキストメニュー)
Botによるメッセージ転送(Webhook)は、見た目上はそのユーザーが直接発言しているように見えますが、内部的な「本当の送信者」をいつでも確認できるツールが搭載されています。
- 使い方: 転送されてきたメッセージを 右クリック >「アプリ」>「グローバルメッセージ詳細」 (スマートフォンの場合はメッセージを長押しして選択) を実行します。
- 確認できる情報:
- 本当の送信者の名前と、一意のユーザーID (
123456789...) - そのメッセージが送信された大元のサーバー名とサーバーID
- 属しているグローバルチャット名
- 送信日時と、データベース上のオリジナルメッセージID
- 本当の送信者の名前と、一意のユーザーID (
- 活用方法: 荒らしや不適切な発言があった場合、この機能を使って「本当のユーザーID」を取得し、後述する
/globalchat_banで対象を確実にBANすることができます。
2. 洗練された「返信・編集・削除」の同期
グローバルチャットでは、自分の言葉に対して責任を持てるよう、送信後のアクションも全てのサーバーに同期されます。
編集 (Edit) の同期
あなたが自分のメッセージを「編集」すると、Botはデータベースから、そのメッセージが転送された全てのサーバーのWebhookメッセージIDを検索し、全サーバーで同時に発言内容を書き換えます。
削除 (Delete) の連鎖
あなたが自分のメッセージを「削除」すると、同じく全サーバーからWebhookのコピーメッセージが一斉に削除されます。
Discordの「返信機能」への完全対応
- 転送されてきたWebhookメッセージに対してDiscordの**「返信」**を行うと、Botは以下の処理を行います。
- 元の送信者の名前とアバター画像を取得し、見やすい「引用Embed」を生成します。
- さらに、返信元のメッセージへ一瞬で飛べる**「返信元へ」ボタン**をメッセージの下部に自動付与します。ボタンのURLは、ターゲット先のチャンネル内で有効な正しいメッセージIDに動的に計算されます。
- もし返信元のオリジナルメッセージが後から削除された場合、引用Embedは自動的に
*元のメッセージは削除されました*という表示に更新されます。
3. グローバルチャットの作成・参加システム
グローバルチャットは用途に合わせて無数に作成することができます。
チャットの作成と公開設定 (/globalchat_create)
- サーバー管理者は、現在のチャンネルを起点に新しいチャットネットワークを作成できます。
- 公開(Public): 誰でも
/globalchat_public_listからIDを見つけて自由に参加できるオープンなチャットネットワークになります。 - 非公開(Private): 特定の身内サーバー同士だけで繋ぎたい場合に使用します。参加には、管理者が発行する「1回限り有効な招待キー」が必要です (
/globalchat_inviteで発行)。
参加と脱退 (/globalchat_join / /globalchat_leave)
- 複数の異なるグローバルチャットに同時に複数のチャンネルを接続することも可能です(Aチャンネルは雑談グローバル、Bチャンネルはゲーム募集グローバルなど)。
- 脱退コマンドを使用すると即座に接続が解除され、他サーバーに「〇〇サーバーが脱退しました」と通知されます。
4. 管理機能と強力なセキュリティ(荒らし対策)
複数のサーバーを繋ぐ特性上、荒らしが発生しやすいため、管理者は強力な治安維持ツールを利用できます。
自動スパム対策とリンクフィルター (/globalchat_settings)
- 招待リンク禁止:
discord.gg/など、他のサーバーへの招待リンクを含む発言を検知し、瞬時に自動削除します。 - スパムフィルター: 「10秒間に5回発言したら自動削除して警告を出す」といった連投制限を、管理者が専用のポップアップ(Modal UI)から秒数や回数を細かくカスタマイズして有効化できます。
モデレーションコマンド群
- 特定のメッセージを一斉削除 (
/globalchat_delete_message): 特定のメッセージIDを指定することで、不適切な発言を全サーバーから強制的に消し去り、「管理者がメッセージを削除しました」という全体通知を出します。- 仕様の詳細: このコマンドには、本当の送信者が送付した元のメッセージID(オリジナルID)と、あなたのサーバーに転送されてきたWebhookのメッセージIDのどちらを指定しても機能します。WebhookのIDを指定した場合でも、Botが裏側で自動的に大元の発信源を特定し、ネットワーク上のすべての関連メッセージを一斉削除します。
- グローバルBAN (
/globalchat_ban): 荒らしを行うユーザーのIDを指定し、そのグローバルチャットからの発言を完全にブロックします。対象ユーザーが別の参加サーバーに移動して発言しても、データベース(user_id管理)で弾かれ、発言は即座に削除(❌リアクション付き)されます。 - サーバー強制退会 (
/globalchat_kick_server): 治安の悪いサーバーそのものを、チャットネットワークから強制切断します。
管理体制の強化
作成者は、他の信頼できるユーザーを権限者として追加 (/globalchat_add_admin) し、BANやメッセージ削除などの対応を分散させることができます。これらのモデレーションが行われた際は、全サーバーに「誰が何を行ったか」が青や赤のEmbedで通知されます。