Created
December 3, 2022 19:19
-
-
Save nerlihmax/eac48276c99b4c346eba7bfaefd9550a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const decode = (encoded) => { | |
const _0 = '\u200c'; | |
const _1 = '\u200d'; | |
const chLen = 25; | |
const emLen = 25; | |
let channelName = ''; | |
let emoteName = ''; | |
for (let i = 0; i < chLen; i++) { | |
let byte = 0; | |
for (let b = 0; b < 8; b++) { | |
let bit = encoded[i*8+b]; | |
if (bit === _1) byte += 2**b; | |
} | |
channelName += String.fromCharCode(byte); | |
} | |
for (let i = 0; i < emLen; i++) { | |
let byte = 0; | |
for (let b = 0; b < 8; b++) { | |
let bit = encoded[chLen*8+i*8+b]; | |
if (bit === _1) byte += 2**b; | |
} | |
emoteName += String.fromCharCode(byte); | |
} | |
channelName = channelName.split(String.fromCharCode(0))[0]; | |
emoteName = emoteName.split(String.fromCharCode(0))[0]; | |
return { channelName: channelName, emoteName: emoteName }; | |
}; | |
export const encode = ({ channelName, emoteName }) => { | |
const _0 = '\u200c'; | |
const _1 = '\u200d'; | |
const chLen = 25; | |
const emLen = 25; | |
let encoded = ''; | |
let channelNameEncoded = ''; | |
for (let i = 0; i < channelName.length; i++) { | |
let byte = channelName.charCodeAt(i); | |
for (let b = 0; b < 8; b++) { | |
if (byte >= 2**(7-b)) { | |
channelNameEncoded += _1; | |
byte -= 2**(7-b); | |
} else channelNameEncoded += _0; | |
} | |
for (let b = 7; b >= 0; b--) encoded += channelNameEncoded.charAt(i*8+b); | |
} | |
for (let i = 0; i < 25-channelName.length; i++) { | |
for (let b = 0; b < 8; b++) encoded += _0; | |
} | |
let emoteNameEncoded = ''; | |
for (let i = 0; i < emoteName.length; i++) { | |
let byte = emoteName.charCodeAt(i); | |
for (let b = 0; b < 8; b++) { | |
if (byte >= 2**(7-b)) { | |
emoteNameEncoded += _1; | |
byte -= 2**(7-b); | |
} else emoteNameEncoded += _0; | |
} | |
for (let b = 7; b >= 0; b--) encoded += emoteNameEncoded.charAt(i*8+b); | |
} | |
for (let i = 0; i < 25-emoteName.length; i++) { | |
for (let b = 0; b < 8; b++) encoded += _0; | |
} | |
return encoded; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment