mcpField
R
roblox-textchat-channels

roblox-textchat-channels

github.com/flatbedj開発059 回インストール今日更新
リポジトリ

roblox-textchat-channels について

roblox-textchat-channelsは、TextChatServiceを使ってRobloxゲームにカスタムチャットチャンネルとサーバー間メッセージ配信を実装するためのスキルガイドです。チャンネルタブ、プレイヤーの参加、イベントフィードやチャット中継を設定する開発者向けです。

主な機能

  1. 01チャンネルタブの設定
  2. 02TextChannelの作成とメンバー追加
  3. 03クライアント側のシステムメッセージ表示
  4. 04サーバー間のイベント中継
  5. 05サーバー間のプレイヤーチャット中継
  6. 06MessagingService呼び出しの保護

活用シーン

  1. 01ゲーム内に個別のチャットタブを設定
  2. 02チャンネルにゲームイベントを表示
  3. 03複数サーバーへレアドロップ通知を配信
  4. 04ゲームサーバー間でチャットを中継

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/flatbedj/roblox-skills --skill roblox-textchat-channels

インストール後、Claude Code で/roblox-textchat-channelsを入力して読み込まれたか確認します。

詳細

Roblox のカスタムチャット:チャンネル、タブ、サーバー間通信

最新のゲームでは TextChatService(ChatVersion = TextChatService)を使用します。切り替え可能な実際のチャンネルタブと、サーバー間配信を実現する方法を紹介します。中でも、見落としやすい点を中心に説明します。

2 つのチャンネルをタブとして表示する(デフォルトではオフになっている重要な設定)

最新のデフォルトチャットでは、チャンネルタブを有効にしない限り、すべての内容が 1 つのウィンドウにまとめられます。設定は 2 つあります。編集モードでプレイスのプロパティとして設定するのが最適です(実行時に設定するのでは遅すぎます。チャットサーバーが先に起動するため、デフォルトの接続設定が壊れる可能性があります)。

  • TextChatService.CreateDefaultTextChannels = false — デフォルトの RBXGeneral/System タブを削除し、必要なチャンネルだけを表示します。
  • TextChatService.ChannelTabsConfiguration.Enabled = true — チャンネルをタブとして表示するためのスイッチです。 ChannelTabsConfiguration は TextChatService の子として自動作成されます。有効にすると、カスタム TextChannel がそれぞれ Name をラベルとするタブに自動的になります。チャンネルごとの設定は不要です。

⚠️ どちらもプレイスのプロパティなので、セッションをまたいで保持するにはプレイスの保存が必要です。フォールバックとして実行時に ChatService.start() でも設定してください。ただし、起動時に確実に反映されるのは編集モード/プレイスの値です。

チャンネルの作成(サーバー)

CreateDefaultTextChannels = false の場合、TextChannels コンテナーは自動作成されません。そのため、以下のようにします。

local container = TextChatService:FindFirstChild("TextChannels")
if not container then
    local f = Instance.new("Folder"); f.Name = "TextChannels"; f.Parent = TextChatService; container = f
end
-- Tab order = CREATION order (there is NO reorder API — it's an open devforum feature request).
-- Create the channel you want leftmost FIRST.
local here   = Instance.new("TextChannel"); here.Name   = "Here";   here.Parent   = container
local global = Instance.new("TextChannel"); global.Name = "Global"; global.Parent = container

プレイヤーがチャンネルを読んだり書き込んだりできるよう、参加時にすべてのチャンネルへ追加します:channel:AddUserAsync(player.UserId)(プレイヤーの TextSource が作成されます。pcall でエラーを処理してください。これは yield するため、呼び出しは順番に実行されます)。

チャンネルへのメッセージ表示(クライアント)

textChannel:DisplaySystemMessage(richText) は、呼び出したクライアントのそのチャンネルのタブにのみメッセージを表示します。ゲームイベントのフィード(ガチャ結果、アナウンスなど)を特定のタブに表示する用途に使えます。RichText を使用できますが、プレイヤーが </font> タグを注入できないよう、ユーザー提供テキストを先にエスケープしてください(s:gsub("&","&amp;"):gsub("<","&lt;"):gsub(">","&gt;"))。

MessagingService を使ったサーバー間通信(チャットまたはイベントフィード)

DisplaySystemMessage はローカルのみで、通常のチャンネル配信もサーバー内に限られます。サーバー間で配信するには、次のようにします。

  • イベントフィード(例:すべてのサーバーにレアドロップを通知する): イベント発生時に、payload.j = game.JobId を設定して MessagingService:PublishAsync(TOPIC, payload) を呼び出します。すべてのサーバーで SubscribeAsync(TOPIC, ...) を呼び出します。data.j ~= game.JobId(別のサーバー)の場合は、RemoteEvent をローカルクライアントに送信し、クライアント側で DisplaySystemMessage を呼び出します。重複を避けるため、ローカル側のコピーは FireAllClients ですぐに送信し、サブスクライバーでは自身の JobId をスキップします。
  • サーバー間のプレイヤーチャット: チャンネルの ShouldDeliverCallback(サーバー上で受信者ごとに実行されます)を設定します。MessagingService:PublishAsync を使ってメッセージを一度だけ中継し(message.MessageId で重複を排除)、ローカルにも配信するため return true を返します。他のサーバーはメッセージを受信し、クライアントに DisplaySystemMessage で表示します(ローカルではネイティブメッセージ、リモートではシステムメッセージとして表示されますが、許容できます)。
  • MessagingService は必ず pcall でエラーを処理してください。API アクセスが無効な場合(Studio)や、レート制限(トピックあたり毎分約 150 + 60×プレイヤー数メッセージ)に達した場合、エラーが発生します。その際、機能をクラッシュさせず、サーバー内のみで動作する状態にできます。

テスト時の注意点

  • ソロの Studio ではサーバー間通信をテストできません(サーバーが 1 つしかないため)。MessagingService の送受信は自身にしか届きません。サーバー内の処理(チャンネルが存在すること、プレイヤーがメンバーであること、DisplaySystemMessage が表示されること)を確認し、サーバー間の処理を慎重に接続してください。
  • Server データモデルから Net.event("X"):FireAllClients(payload) でテストイベントを送信し、その後チャットを screen_capture で撮影します(新しいメッセージがあるとウィンドウが表示されます)。書式と表示先のタブを確認してください。

教訓

チャットや UI について「プラットフォームでは X ができない」と判断する前に、create.roblox.com/docs と devforum を確認してください。最新のチャットは、見た目以上に高機能です(チャンネルタブ、グラデーション、設定などが利用できます)。ドキュメント:create.roblox.com/docs/chat/chat-window;devforum「Channel Tabs & UI Gradient Now Available in TextChatService」。

コメント