ControlC
· Pastebin
Login
Register
ControlC
/
Create paste
Paste content
Up to 100 KB of text. BBCode formatting is supported.
Title
- optional
Content
B
I
U
S
</>
Colors ↓
Sizes ↓
Size 1
Size 2
Size 3
Size 4
Size 5
Size 6
Size 7
--[[\r\n Message Translator\r\n Made by Aim, updated by cli\r\n Credits to Riptxde for the sending chathook\r\n--]]\r\n\r\nif not game['Loaded'] then game['Loaded']:Wait() end; repeat wait(.06) until game:GetService('Players').LocalPlayer ~= nil\r\nlocal YourLang = \"en\" -- Language code that the messages are going to be translated to\r\n\r\nlocal googlev = isfile'googlev.txt' and readfile'googlev.txt' or ''\r\n\r\nfunction googleConsent(Body) -- Because google really said: \"Fuck you.\"\r\n local args = {}\r\n\r\n for match in Body:gmatch('<input type=\"hidden\" name=\".-\" value=\".-\">') do\r\n local k,v = match:match('<input type=\"hidden\" name=\"(.-)\" value=\"(.-)\">')\r\n args[k] = v\r\n end\r\n googlev = args.v\r\n writefile('googlev.txt', args.v)\r\nend\r\n\r\nlocal function got(url, Method, Body) -- Basic version of https://www.npmjs.com/package/got using synapse's request API for google websites\r\n Method = Method or \"GET\"\r\n \r\n local res = syn.request({\r\n Url = url,\r\n Method = Method,\r\n Headers = {cookie=\"CONSENT=YES+\"..googlev},\r\n Body = Body\r\n })\r\n \r\n if res.Body:match('https://consent.google.com/s') then\r\n print('consent')\r\n googleConsent(res.Body)\r\n res = syn.request({\r\n Url = url,\r\n Method = \"GET\",\r\n Headers = {cookie=\"CONSENT=YES+\"..googlev}\r\n })\r\n end\r\n \r\n return res\r\nend\r\n\r\nlocal languages = {\r\n auto = \"Automatic\",\r\n af = \"Afrikaans\",\r\n sq = \"Albanian\",\r\n am = \"Amharic\",\r\n ar = \"Arabic\",\r\n hy = \"Armenian\",\r\n az = \"Azerbaijani\",\r\n eu = \"Basque\",\r\n be = \"Belarusian\",\r\n bn = \"Bengali\",\r\n bs = \"Bosnian\",\r\n bg = \"Bulgarian\",\r\n ca = \"Catalan\",\r\n ceb = \"Cebuano\",\r\n ny = \"Chichewa\",\r\n ['zh-cn'] = \"Chinese Simplified\",\r\n ['zh-tw'] = \"Chinese Traditional\",\r\n co = \"Corsican\",\r\n hr = \"Croatian\",\r\n cs = \"Czech\",\r\n da = \"Danish\",\r\n nl = \"Dutch\",\r\n en = \"English\",\r\n eo = \"Esperanto\",\r\n et = \"Estonian\",\r\n tl = \"Filipino\",\r\n fi = \"Finnish\",\r\n fr = \"French\",\r\n fy = \"Frisian\",\r\n gl = \"Galician\",\r\n ka = \"Georgian\",\r\n de = \"German\",\r\n el = \"Greek\",\r\n gu = \"Gujarati\",\r\n ht = \"Haitian Creole\",\r\n ha = \"Hausa\",\r\n haw = \"Hawaiian\",\r\n iw = \"Hebrew\",\r\n hi = \"Hindi\",\r\n hmn = \"Hmong\",\r\n hu = \"Hungarian\",\r\n is = \"Icelandic\",\r\n ig = \"Igbo\",\r\n id = \"Indonesian\",\r\n ga = \"Irish\",\r\n it = \"Italian\",\r\n ja = \"Japanese\",\r\n jw = \"Javanese\",\r\n kn = \"Kannada\",\r\n kk = \"Kazakh\",\r\n km = \"Khmer\",\r\n ko = \"Korean\",\r\n ku = \"Kurdish (Kurmanji)\",\r\n ky = \"Kyrgyz\",\r\n lo = \"Lao\",\r\n la = \"Latin\",\r\n lv = \"Latvian\",\r\n lt = \"Lithuanian\",\r\n lb = \"Luxembourgish\",\r\n mk = \"Macedonian\",\r\n mg = \"Malagasy\",\r\n ms = \"Malay\",\r\n ml = \"Malayalam\",\r\n mt = \"Maltese\",\r\n mi = \"Maori\",\r\n mr = \"Marathi\",\r\n mn = \"Mongolian\",\r\n my = \"Myanmar (Burmese)\",\r\n ne = \"Nepali\",\r\n no = \"Norwegian\",\r\n ps = \"Pashto\",\r\n fa = \"Persian\",\r\n pl = \"Polish\",\r\n pt = \"Portuguese\",\r\n pa = \"Punjabi\",\r\n ro = \"Romanian\",\r\n ru = \"Russian\",\r\n sm = \"Samoan\",\r\n gd = \"Scots Gaelic\",\r\n sr = \"Serbian\",\r\n st = \"Sesotho\",\r\n sn = \"Shona\",\r\n sd = \"Sindhi\",\r\n si = \"Sinhala\",\r\n sk = \"Slovak\",\r\n sl = \"Slovenian\",\r\n so = \"Somali\",\r\n es = \"Spanish\",\r\n su = \"Sundanese\",\r\n sw = \"Swahili\",\r\n sv = \"Swedish\",\r\n tg = \"Tajik\",\r\n ta = \"Tamil\",\r\n te = \"Telugu\",\r\n th = \"Thai\",\r\n tr = \"Turkish\",\r\n uk = \"Ukrainian\",\r\n ur = \"Urdu\",\r\n uz = \"Uzbek\",\r\n vi = \"Vietnamese\",\r\n cy = \"Welsh\",\r\n xh = \"Xhosa\",\r\n yi = \"Yiddish\",\r\n yo = \"Yoruba\",\r\n zu = \"Zulu\"\r\n};\r\n\r\nfunction find(lang)\r\n for i,v in pairs(languages) do\r\n if i == lang or v == lang then\r\n return i\r\n end\r\n end\r\nend\r\n\r\nfunction isSupported(lang)\r\n local key = find(lang)\r\n return key and true or false \r\nend\r\n\r\nfunction getISOCode(lang)\r\n local key = find(lang)\r\n return key\r\nend\r\n\r\nfunction stringifyQuery(dataFields)\r\n local data = \"\"\r\n for k, v in pairs(dataFields) do\r\n if type(v) == \"table\" then\r\n for _,v in pairs(v) do\r\n data = data .. (\"&%s=%s\"):format(\r\n game.HttpService:UrlEncode(k),\r\n game.HttpService:UrlEncode(v)\r\n )\r\n end\r\n else\r\n data = data .. (\"&%s=%s\"):format(\r\n game.HttpService:UrlEncode(k),\r\n game.HttpService:UrlEncode(v)\r\n )\r\n end\r\n end\r\n data = data:sub(2)\r\n return data\r\nend\r\n\r\nlocal reqid = math.random(1000,9999)\r\nlocal rpcidsTranslate = \"MkEWBc\"\r\nlocal rootURL = \"https://translate.google.com/\"\r\nlocal executeURL = \"https://translate.google.com/_/TranslateWebserverUi/data/batchexecute\"\r\nlocal fsid, bl\r\n\r\ndo -- init\r\n print('initialize')\r\n local InitialReq = got(rootURL)\r\n fsid = InitialReq.Body:match('\"FdrFJe\":\"(.-)\"')\r\n bl = InitialReq.Body:match('\"cfb2h\":\"(.-)\"')\r\nend\r\n\r\nlocal HttpService = game:GetService(\"HttpService\")\r\nfunction jsonE(o)\r\n return HttpService:JSONEncode(o)\r\nend\r\nfunction jsonD(o)\r\n return HttpService:JSONDecode(o)\r\nend\r\n\r\nfunction translate(str, to, from)\r\n reqid+=10000\r\n from = from and getISOCode(from) or 'auto'\r\n to = to and getISOCode(to) or 'en'\r\n\r\n local data = {{str, from, to, true}, {nil}}\r\n\r\n local freq = {\r\n {\r\n {\r\n rpcidsTranslate, \r\n jsonE(data),\r\n nil,\r\n \"generic\"\r\n }\r\n }\r\n }\r\n\r\n local url = executeURL..'?'..stringifyQuery{rpcids = rpcidsTranslate, ['f.sid'] = fsid, bl = bl, hl=\"en\", _reqid = reqid-10000, rt = 'c'}\r\n local body = stringifyQuery{['f.req'] = jsonE(freq)}\r\n \r\n local req = got(url, \"POST\", body)\r\n \r\n local body = jsonD(req.Body:match'%[.-%]\n')\r\n local translationData = jsonD(body[1][3])\r\n local result = {\r\n text = \"\",\r\n from = {\r\n language = \"\",\r\n text = \"\"\r\n },\r\n raw = \"\"\r\n }\r\n result.raw = translationData\r\n result.text = translationData[2][1][1][6][1][1]\r\n \r\n result.from.language = translationData[3]\r\n result.from.text = translationData[2][5][1]\r\n\r\n return result\r\nend\r\n\r\nlocal Players = game:GetService(\"Players\")\r\nlocal LP = Players.LocalPlayer\r\nlocal StarterGui = game:GetService('StarterGui')\r\nfor i=1, 15 do\r\n local r = pcall(StarterGui[\"SetCore\"])\r\n if r then break end\r\n game:GetService('RunService').RenderStepped:wait()\r\nend\r\nwait()\r\n\r\nlocal properties = {\r\n Color = Color3.new(1,1,0);\r\n Font = Enum.Font.SourceSansItalic;\r\n TextSize = 16;\r\n}\r\n\r\ngame:GetService(\"StarterGui\"):SetCore(\"SendNotification\",\r\n {\r\n Title = \"Chat Translator\",\r\n Text = \"Ported to Google Translate\",\r\n Duration = 3\r\n }\r\n)\r\n \r\nproperties.Text = \"[TR] To send messages in a language, say > followed by the target language/language code, e.g.: >ru or >russian. To disable (go back to original language), say >d.\"\r\nStarterGui:SetCore(\"ChatMakeSystemMessage\", properties)\r\n\r\nfunction translateFrom(message)\r\n local translation = translate(message, YourLang)\r\n\r\n local text\r\n if translation.from.language ~= YourLang then \r\n text = translation.text\r\n end\r\n\r\n return {text, translation.from.language}\r\nend\r\n\r\nfunction get(plr, msg)\r\n local tab = translateFrom(msg)\r\n local translation = tab[1]\r\n if translation then\r\n properties.Text = \"(\"..tab[2]:upper()..\") \"..\"[\".. plr.Name ..\"]: \"..translation\r\n StarterGui:SetCore(\"ChatMakeSystemMessage\", properties)\r\n end\r\nend\r\n\r\nfor i, plr in ipairs(Players:GetPlayers()) do\r\n plr.Chatted:Connect(function(msg)\r\n get(plr, msg)\r\n end)\r\nend\r\nPlayers.PlayerAdded:Connect(function(plr)\r\n plr.Chatted:Connect(function(msg)\r\n get(plr, msg)\r\n end)\r\nend)\r\n\r\nlocal sendEnabled = false\r\nlocal target = \"\"\r\n\r\nfunction translateTo(message, target)\r\n target = target:lower() \r\n local translation = translate(message, target, \"auto\")\r\n\r\n return translation.text\r\nend\r\n\r\nfunction disableSend()\r\n sendEnabled = false\r\n properties.Text = \"[TR] Sending Disabled\"\r\n StarterGui:SetCore(\"ChatMakeSystemMessage\", properties)\r\nend\r\n\r\nlocal CBar, CRemote, Connected = LP['PlayerGui']:WaitForChild('Chat')['Frame'].ChatBarParentFrame['Frame'].BoxFrame['Frame'].ChatBar, game:GetService('ReplicatedStorage').DefaultChatSystemChatEvents['SayMessageRequest'], {}\r\n\r\nlocal HookChat = function(Bar)\r\n coroutine.wrap(function()\r\n if not table.find(Connected,Bar) then\r\n local Connect = Bar['FocusLost']:Connect(function(Enter)\r\n if Enter ~= false and Bar['Text'] ~= '' then\r\n local Message = Bar['Text']\r\n Bar['Text'] = '';\r\n if Message == \">d\" then\r\n disableSend()\r\n elseif Message:sub(1,1) == \">\" and not Message:find(\" \") then\r\n if getISOCode(Message:sub(2)) then\r\n sendEnabled = true\r\n target = Message:sub(2)\r\n else\r\n properties.Text = \"[TR] Invalid language\"\r\n StarterGui:SetCore(\"ChatMakeSystemMessage\", properties)\r\n end\r\n elseif sendEnabled then\r\n Message = translateTo(Message, target)\r\n if not _G.SecureChat then\r\n game:GetService('Players'):Chat(Message); \r\n end\r\n CRemote:FireServer(Message,'All')\r\n else\r\n if not _G.SecureChat then\r\n game:GetService('Players'):Chat(Message); \r\n end\r\n CRemote:FireServer(Message,'All')\r\n end\r\n end\r\n end)\r\n Connected[#Connected+1] = Bar; Bar['AncestryChanged']:Wait(); Connect:Disconnect()\r\n end\r\n end)()\r\nend\r\n\r\nHookChat(CBar); local BindHook = Instance.new('BindableEvent')\r\n\r\nlocal MT = getrawmetatable(game); local NC = MT.__namecall; setreadonly(MT, false)\r\n\r\nMT.__namecall = newcclosure(function(...)\r\n local Method, Args = getnamecallmethod(), {...}\r\n if rawequal(tostring(Args[1]),'ChatBarFocusChanged') and rawequal(Args[2],true) then \r\n if LP['PlayerGui']:FindFirstChild('Chat') then\r\n BindHook:Fire()\r\n end\r\n end\r\n return NC(...)\r\nend)\r\n\r\nBindHook['Event']:Connect(function()\r\n CBar = LP['PlayerGui'].Chat['Frame'].ChatBarParentFrame['Frame'].BoxFrame['Frame'].ChatBar\r\n HookChat(CBar)\r\nend)
Password
Anyone with the link will still need this password to view.
Expires
1 hour
3 hours
6 hours
12 hours
24 hours
48 hours
72 hours
Sign in to enable "Never expires".
Create paste
Please verify you are human
Cancel