Skip to content

Instantly share code, notes, and snippets.

@nerlihmax
Created December 3, 2022 19:19
Show Gist options
  • Save nerlihmax/eac48276c99b4c346eba7bfaefd9550a to your computer and use it in GitHub Desktop.
Save nerlihmax/eac48276c99b4c346eba7bfaefd9550a to your computer and use it in GitHub Desktop.
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