SyntaxGameServer/RCCService2021/content/hidden/rcc/modules/BotInfo.lua

88 lines
2.3 KiB
Lua

-- chat bot info heuristic (assume simple checksum is good enough)
return function()
local rbxAnalyticsService = game:GetService("RbxAnalyticsService")
local JOIN_TIME_IDX = 1
local CHAT_TIME_IDX = 2
local CHAT_MSG_IDX = 3
local info = {}
local players = game:GetService("Players")
local replicatedStorage = game:GetService("ReplicatedStorage")
-- init
players.PlayerAdded:Connect(function (player)
pcall(function()
info[tostring(player.UserId)] = {os.time(), -1, ""}
end)
end)
-- send influx
players.PlayerRemoving:Connect(function (player)
if info == nil then
return
end
local userid = tostring(player.UserId)
local record = info[userid]
if record == nil then
return
end
local botReport = settings():GetFFlag("JumpScaresP2")
local permyriad = game:GetFastInt("RedPermyriad")
if botReport == false and permyriad <= 0 then
return
end
local now = os.time()
local duration = now - record[JOIN_TIME_IDX]
if record[CHAT_TIME_IDX] == -1 or duration > 60 then
return
end
if (botReport == true) then
player:SetBotStatus(1)
end
if (permyriad > 0) then
pcall(function()
info[userid] = nil
if (permyriad > 0 and rbxAnalyticsService) then
local points = {
chsrId = player.UserId,
duration = duration,
chat = (now - record[CHAT_TIME_IDX]),
msg = tostring(record[CHAT_MSG_IDX])
}
rbxAnalyticsService:ReportInfluxSeries("ChatBot", points, permyriad)
end
end)
end
end)
-- record
spawn(function ()
local chatEvents = replicatedStorage:WaitForChild("DefaultChatSystemChatEvents", 60)
if not chatEvents then
return
end
local sayMessageRequest = chatEvents:WaitForChild("SayMessageRequest", 1)
if not sayMessageRequest then
return
end
local connection = sayMessageRequest.OnServerEvent:Connect(function(player, message)
xpcall(function()
if typeof(message) == "string" and #message > 60 then
local userid = tostring(player.UserId)
local record = info[userid]
if record == nil or record[CHAT_TIME_IDX] ~= -1 then
return
end
record[CHAT_TIME_IDX] = os.time()
local tmpStr = string.sub(message, 1, 256)
local strEnd = #tmpStr
local acc = 0
for i = 1,strEnd do
acc = acc + tmpStr:byte(i)
end
record[CHAT_MSG_IDX] = acc
info[userid] = record
end
end, function() end)
end)
end)
end