💬

【Discord】自分だけのグローバルチャットが作れるbotを作ってみた

に公開

はじめまして、siyukatuです。
Discordではじめてグローバルチャットを見たときから「面白そうだからグローバルチャットを作ってみたい」と思っていたのですが、今回VPSが余っていたので思い切って作ってみました。

そもそもグローバルチャットとは何か

一言で説明すると、複数サーバーをまたいで会話出来るようにするものです。

例えばサーバーが2つあり、それぞれが繋がっている状態のサーバーAで「こんにちは」と発言したとします。
そしたらbotがメッセージをサーバーBに転送します。

処理的に説明するなら、お互いのメッセージが相互に転送されあうものです。

自分だけのグローバルチャットって何?

一般的なグローバルチャットはbot全体で1つの部屋しか無く、自分だけの部屋を持つことが出来ません。
つまり、一般的なグローバルチャットを使う場合、botが提供する部屋と接続され、自分だけの部屋を作ることは出来ません。
よく「〇〇(bot名)グローバル」とか言われたりしてますね。

ところが、今回作成したグローバルチャットbotでは自分だけの部屋が作れてしまいます。
サーバーが4つあっても、AはBとだけ、CはDとだけ繋ぎたいみたいなパターンで思い通りに繋ぐことができます。

使い方

接続する

  1. https://siyukatu.com/globalchat/ を開く
  2. 「導入する」をクリック (ルールも読んでおいてください)
  3. 案内に従って導入する
  4. 導入できたら、サーバーに適当なチャンネル(名前は例えば「グローバルチャット」)を作る
  5. /regist を実行する (room に部屋名をいれると自分だけのグローバルチャットになります)

他の人に接続してもらう

上記の「接続する」の手順のうち、1-4をサーバー管理者に実行してもらってください。
その後、サーバー管理者に /roomname_request を実行してもらってください。

切断する

切断したいチャンネルで /unregist を実行すると切断されます。

ルーム機能の詳細

メッセージが送られた時、ルーム名が同じチャンネルに転送する仕組みになっています。
つまり、仲が良い他のサーバーとだけ繋ぐことができます。

※ルーム名を省略すると総合グローバルに繋がります。

ルームの管理者

普通にルーム名を決定して /regist を実行すると、「管理サーバーについて」という案内が表示され、推奨ルーム名が提示されます。
これは、グローバルチャットのルームを管理することができる機能です。

(管理サーバーのID)-(任意の文字列) という形式でルーム名を指定すると、指定されたIDのサーバーでは /manage というコマンドが使用できるようになります。
![/manage を実行したときの様子/manage を実行したときのようす/manage を実行したときのようす/manage を実行したときのようs/manage を実行したときのよう/managh

意識したこと

このbotを作る上で何を意識して作ったかなど話します。
(UXあたりの話)

普通の会話と同じ感じに

グローバルチャットは「埋め込み」を経由してメッセージを転送するものが多いです。
悪くも無いんですが正直見づらい。
なのでWebhook式を採用しています。

Discordは「誰が発言したのか」によってメッセージがいい感じに分割されて見やすくなります。
しかし、埋め込みでは上手く分割されない...

編集や削除を出来るようにする

これ、大体のグローバルチャットでは出来ません。
一度送ったらそれっきりで、一生消せなくなります。
もし誤って個人情報なんかを送ってしまったら一体どうなるのでしょうか?

なので、メッセージの編集や削除は全て反映されるようにしました。

詳細に設定出来るようにする

今回私はルーム機能の他に「コンフィグ」というものも作成しました。
グローバルチャットbotの動作を細かく決められる機能です。
リプライのメンションを切れたりするようになるものです。
今後も「ここカスタマイズしたい!」みたいな要望があれば積極的に受け入れていきます。

情報量は少なく

デザインのお話です。

どのグローバルチャットを見てもこう思います。
「一つのメッセージに情報詰め込みすぎじゃないですか?」

というのも、大体のグローバルチャットで転送されたメッセージには以下の情報が詰め込まれています。

  • 送信したユーザーの情報
    • アバター画像
    • ユーザー名
    • ユーザーID
  • 本文
  • 送信元サーバーの情報
    • アイコン画像
    • サーバー名
    • サーバーID
  • 送信元チャンネルの情報
    • チャンネル名
    • チャンネルID
  • メッセージID
  • 送信時刻

言うまでもありませんが、これは多すぎます。

この中で、一般人にとって必要なのは

  • 送信したユーザーの情報
    • アバター画像
    • ユーザー名
  • 本文

だけです。
そこで、これらの不要な情報はデータベースに収納し、 !info コマンドを実行することで確認できる設計にしました。

スーパーグローバルチャット (SGC)

このbotは2026年3月27日にスーパーグローバルチャットに加盟しました。
/regist を実行する際、ルーム名に sgc と指定することで、スーパーグローバルチャットに接続できます。

スーパーグローバルチャットとは

前提として、Discordにはグローバルチャットを搭載しているbotがいくつかあります。
それらの各botのグローバルチャットを接続し、規模を大きくしたものがスーパーグローバルチャットです。

Discussion