test_parse.mjs
1 const rawSample = "@badge-info=;badges=;client-nonce=5321d2e6bc17a6d3e878d2ca7b1dc240;color=#00FF7F;display-name=Dhevoni;emotes=;first-msg=0;flags=;id=23eee74b-ddfa-4f82-95ae-03d85db0bc67;mod=0;returning-chatter=0;room-id=97782735;subscriber=0;tmi-sent-ts=1727839928786;turbo=0;user-id=60871641;user-type= :dhevoni!dhevoni@dhevoni.tmi.twitch.tv PRIVMSG #solidfps :how many guilds does epherium have on the server now?\r\n" 2 3 function ParseMessage(raw) { 4 const atCharacter = raw.indexOf("@") 5 , firstSpace = raw.indexOf(" ") 6 , firstColon = raw.indexOf(":", firstSpace+1) 7 , secondColon = raw.indexOf(":", firstColon+1) 8 9 const tagsRaw = raw.substring(atCharacter+1, firstColon) 10 , sourceRaw = raw.substring(firstColon+1, secondColon) 11 , message = raw.substring(secondColon+1) 12 13 const tags = {} 14 15 for (const tag of tagsRaw.split(";")) { 16 const [key, value] = tag.split("=") 17 tags[key] = value 18 } 19 20 const nickname = sourceRaw.substring(sourceRaw.indexOf("!")+1,sourceRaw.indexOf("@")) 21 22 return { user: nickname, id: +tags["user-id"], bits: tags.bits || 0, message } 23 } 24 25 console.log(ParseMessage(rawSample))