💬

【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 に部屋名をいれると自分だけのグローバルチャットになります!)

切断する

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

ルーム機能の詳細

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

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

意識したこと

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

普通の会話と同じ感じに

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

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

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

これ、大体のグローバルチャットでは出来ません。
一度送ったらそれっきりで、一生消せなくなります。
...結構マズくないですか?

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

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

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

情報量は少なく!情報量は少なく!!情報量は少なく!!!

大事なことなので3回言いました。
デザインのお話です。

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

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

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

流石に多すぎませんか?!
とりあえずグローバルチャットを使う層のことを考えてみてください。
層はプログラマーに限定してるんですか?
いちいちIDなんて表示していたらユーザーは寄ってきません。
自分のロマンを優先するかユーザーを優先するかです。
私はユーザーを優先します。

一つのメッセージに表示する情報なんてユーザーのアバター画像と名前と本文だけでいいんです。
細かい情報なんてDBにしまっておいて !info とか メッセージ詳細 みたいなコマンドを作っておいて、それを叩いたら表示すればいいんです。

Discussion