I’ll take a look at it.
You don’t need to have it in a chatservice module, I’ve done it from a serverside script before.
You don’t, however that module is used in the default chat anyway, and the person that made this model decided to include it in that instead of using a Server script.
I’ve found code by @thelolguy301 that you can pick apart to use.
local Players = game:GetService("Players")
local Storage = game:GetService("ReplicatedStorage")
local ScriptService = game:GetService("ServerScriptService")
local ChatService = require(ScriptService.ChatServiceRunner.ChatService)
local Speaker
game.Players.PlayerAdded:connect(function(player)
repeat wait() until ChatService
if player.UserId == 20415935 then
Speaker = ChatService:GetSpeaker(tostring(player.Name))
print(Speaker)
Speaker:SetExtraData("NameColor", Color3.fromRGB(0, 0, 255))
Speaker:SetExtraData("ChatColor", Color3.fromRGB(0, 255, 0))
Speaker:SetExtraData("Tags", {{TagText = "Developer", TagColor = Color3.fromRGB(255, 0, 255)}})
elseif player.UserId == 558247746 then
Speaker = ChatService:GetSpeaker(tostring(player.Name))
Speaker:SetExtraData("NameColor", Color3.fromRGB(0, 0, 255))
Speaker:SetExtraData("ChatColor", Color3.fromRGB(255, 0, 0))
Speaker:SetExtraData("Tags", {{TagText = "TagText2", TagColor = Color3.fromRGB(0, 255, 0)}})
end
end)
That is a cleaner version of it indeed, however the model I linked allows for tags for people in certain groups, or for certain UserIds, but that can also be added here with a couple of tables.
For what I’m doing, @Starception’s way will work fine.
Thanks though. In the future, I might use the version you sent if I’m doing more complex stuff.
Update:
I’m running this in a Server Script inside ServerScriptService. Not sure if I did something wrong…
The code provided by @Starception relies on a certain module being in ServerScriptService. Unless you have that module, you presumably won’t be able to use that code.
That’s what I was thinking, but I wasn’t quite sure.
Just use the model I linked you.
Try replacing the said line to this:
local ChatService = game:GetService("ChatService")
The only chat-related service afaik is
game:GetService("Chat")
but, at least from the wiki, it doesn’t seem to provide the same functions.
I think I found the scripts you need to run the provided code:
ChatServiceRunner.rbxm (20.8 KB)
I’m just going with Lord’s version. Got it up and working already.
Hayo!
I know this is very similar to other code, but it’s a little more efficient in some aspects.
Instead of waiting for a player to join, it relies on the ChatService to add a speaker.
This is mainly aimed as an easy way to setup group rank tags in-game. Just plop this into a Script under ServerScriptService. Customize to your liking.
Note, this also includes an override for a certain UserId, be sure to change it
--[==[ START VARIABLES ]==]--
local Players = game:GetService("Players")
local ScriptService = game:GetService("ServerScriptService")
local ChatService = require(ScriptService:WaitForChild("ChatServiceRunner").ChatService)
--[==[ END VARIABLES ]==]--
--[==[ START TABLE FOR TAGS ]==]--
--[==[
FORMAT:
["RankInGroup"] = {TagText = "TagTextHere", TagColor = Color3.fromRGB(r, g, b)}
]==]--
local ranks = {
["255"] = {TagText = "Lead Developer", TagColor = Color3.fromRGB(233,30,99)},
["250"] = {TagText = "Lead Scripter", TagColor = Color3.fromRGB(230,126,34)},
["225"] = {TagText = "Place Developer", TagColor = Color3.fromRGB(230,126,34)},
["200"] = {TagText = "Asset Developer", TagColor = Color3.fromRGB(46,204,113)},
["150"] = {TagText = "Moderator", TagColor = Color3.fromRGB(32,102,148)},
["100"] = {TagText = "Moderator-In-Training", TagColor = Color3.fromRGB(76,188,206)},
}
--[==[ END TABLE FOR TAGS ]==]--
--[==[ GROUP ID ]==]--
local groupId = 3108202
--[==[ GROUP ID ]==]--
ChatService.SpeakerAdded:Connect(function(SpeakerName) -- Wait for a speaker to be added to Chat
if game.Players:FindFirstChild(SpeakerName) then -- Makes sure the speaker is a real player
local plr = game.Players:FindFirstChild(SpeakerName) -- Get the player Object
local UserId = plr.UserId -- Getting the UserId of the speaker
local Speaker = ChatService:GetSpeaker(SpeakerName) -- Getting the Speaker Object from ChatService
if plr.UserId == 26666928 then -- Replace 26666928 with your own ID
Speaker:SetExtraData("Tags", {{TagText = "Script Developer", TagColor = Color3.fromRGB(241,196,15)}}) -- Customize the text and color to your liking
Speaker:SetExtraData("NameColor", Color3.fromRGB(241,196,15)) -- Set the name color to the tag color
elseif plr:IsInGroup(groupId) then -- If player is in the group, check the rank
local rank = plr:GetRankInGroup(groupId)
for i,tag in pairs(ranks) do -- Loop through the ranks table
if i == tostring(rank) then -- If the rank of the player is in the ranks table, set the tag accordingly
Speaker:SetExtraData("Tags", {{TagText = tag.TagText, TagColor = tag.TagColor}})
Speaker:SetExtraData("NameColor", tag.TagColor) -- Sets the name color of speaker to the tag color
end
end
end
end
end)
If you’re using the default chat, then this happens because the scripts don’t begin there. You have to use WaitForChild when you need something which won’t always exist by the time your script runs.
Refer to my solution here:
Note my subsequent post regarding getting the Speaker object using the Chat API rather than listening for PlayerAdded.
Theres an opcion first, you need to get all scripts from chat for this you need to press “Test”
When you’re in test mode, go to your explorer and look for Chat, copy everything in chat.
Stop the test and paste the copied scripts and folder.
Now go to the part that says “ChatModules” and press the modulescript called “ExtraDataInitializer”
Next look close from line 143, it would have to say " if not speaker:GetExtraData(“Tags”) then"
And you’ve to paste this…
local player = speaker:GetPlayer()
if player.Name=="YourPlayerNameHere" then
local tags = {
{
TagText = "NameTag",
TagColor = Color3.fromRGB("COLOR HERE, RGB COLOR 255,255,255")
}
}
speaker:SetExtraData("Tags", tags)
else
local tags = {
{
TagText = "NameTag for OtherPeople",
TagColor = Color3.fromRGB("COLOR HERE, RGB COLOR 255,255,255")
}
}
speaker:SetExtraData("Tags", tags)
end
I got it already. Thanks though.