Skip to content

Instantly share code, notes, and snippets.

@SaphireLattice
Last active August 18, 2023 03:22
Show Gist options
  • Save SaphireLattice/ab906e190ec0f25c22e27314d2a78e95 to your computer and use it in GitHub Desktop.
Save SaphireLattice/ab906e190ec0f25c22e27314d2a78e95 to your computer and use it in GitHub Desktop.
A Code128b barcode generator for Discord, doing cursed things to spoilers
const code128b = [
{ char: " ", pattern: "11011001100" },
{ char: "!", pattern: "11001101100" },
{ char: '"', pattern: "11001100110" },
{ char: "#", pattern: "10010011000" },
{ char: "$", pattern: "10010001100" },
{ char: "%", pattern: "10001001100" },
{ char: "&", pattern: "10011001000" },
{ char: "'", pattern: "10011000100" },
{ char: "(", pattern: "10001100100" },
{ char: ")", pattern: "11001001000" },
{ char: "*", pattern: "11001000100" },
{ char: "+", pattern: "11000100100" },
{ char: ",", pattern: "10110011100" },
{ char: "-", pattern: "10011011100" },
{ char: ".", pattern: "10011001110" },
{ char: "/", pattern: "10111001100" },
{ char: "0", pattern: "10011101100" },
{ char: "1", pattern: "10011100110" },
{ char: "2", pattern: "11001110010" },
{ char: "3", pattern: "11001011100" },
{ char: "4", pattern: "11001001110" },
{ char: "5", pattern: "11011100100" },
{ char: "6", pattern: "11001110100" },
{ char: "7", pattern: "11101101110" },
{ char: "8", pattern: "11101001100" },
{ char: "9", pattern: "11100101100" },
{ char: ":", pattern: "11100100110" },
{ char: ";", pattern: "11101100100" },
{ char: "<", pattern: "11100110100" },
{ char: "=", pattern: "11100110010" },
{ char: ">", pattern: "11011011000" },
{ char: "?", pattern: "11011000110" },
{ char: "@", pattern: "11000110110" },
{ char: "A", pattern: "10100011000" },
{ char: "B", pattern: "10001011000" },
{ char: "C", pattern: "10001000110" },
{ char: "D", pattern: "10110001000" },
{ char: "E", pattern: "10001101000" },
{ char: "F", pattern: "10001100010" },
{ char: "G", pattern: "11010001000" },
{ char: "H", pattern: "11000101000" },
{ char: "I", pattern: "11000100010" },
{ char: "J", pattern: "10110111000" },
{ char: "K", pattern: "10110001110" },
{ char: "L", pattern: "10001101110" },
{ char: "M", pattern: "10111011000" },
{ char: "N", pattern: "10111000110" },
{ char: "O", pattern: "10001110110" },
{ char: "P", pattern: "11101110110" },
{ char: "Q", pattern: "11010001110" },
{ char: "R", pattern: "11000101110" },
{ char: "S", pattern: "11011101000" },
{ char: "T", pattern: "11011100010" },
{ char: "U", pattern: "11011101110" },
{ char: "V", pattern: "11101011000" },
{ char: "W", pattern: "11101000110" },
{ char: "X", pattern: "11100010110" },
{ char: "Y", pattern: "11101101000" },
{ char: "Z", pattern: "11101100010" },
{ char: "[", pattern: "11100011010" },
{ char: "\\", pattern: "11101111010" },
{ char: "]", pattern: "11001000010" },
{ char: "^", pattern: "11110001010" },
{ char: "_", pattern: "10100110000" },
{ char: "`", pattern: "10100001100" },
{ char: "a", pattern: "10010110000" },
{ char: "b", pattern: "10010000110" },
{ char: "c", pattern: "10000101100" },
{ char: "d", pattern: "10000100110" },
{ char: "e", pattern: "10110010000" },
{ char: "f", pattern: "10110000100" },
{ char: "g", pattern: "10011010000" },
{ char: "h", pattern: "10011000010" },
{ char: "i", pattern: "10000110100" },
{ char: "j", pattern: "10000110010" },
{ char: "k", pattern: "11000010010" },
{ char: "l", pattern: "11001010000" },
{ char: "m", pattern: "11110111010" },
{ char: "n", pattern: "11000010100" },
{ char: "o", pattern: "10001111010" },
{ char: "p", pattern: "10100111100" },
{ char: "q", pattern: "10010111100" },
{ char: "r", pattern: "10010011110" },
{ char: "s", pattern: "10111100100" },
{ char: "t", pattern: "10011110100" },
{ char: "u", pattern: "10011110010" },
{ char: "v", pattern: "11110100100" },
{ char: "w", pattern: "11110010100" },
{ char: "x", pattern: "11110010010" },
{ char: "y", pattern: "11011011110" },
{ char: "z", pattern: "11011110110" },
{ char: "{", pattern: "11110110110" },
{ char: "|", pattern: "10101111000" },
{ char: "}", pattern: "10100011110" },
{ char: "~", pattern: "10001011110" },
{ char: "DEL", pattern: "10111101000" },
{ char: "FNC 3", pattern: "10111100010" },
{ char: "FNC 2", pattern: "11110101000" },
{ char: "Shift A", pattern: "11110100010" },
{ char: "Code C", pattern: "10111011110" },
{ char: "FNC 4", pattern: "10111101110" },
{ char: "Code A", pattern: "11101011110" },
{ char: "FNC 1", pattern: "11110101110" },
{ char: "START A", pattern: "11010000100" },
{ char: "START B", pattern: "11010010000" },
{ char: "START C", pattern: "11010011100" },
{ char: "STOP", pattern: "1100011101011" },
{ char: "REVERSE STOP", pattern: "11010111000" },
];
function binaryToSpoilers(code, spacer) {
return code
.replace(/1/g, "||" + spacer + "||")
.replace(/0/g, spacer)
.replace(/\|\|\|\|/g, "");
}
function convert(input, spacer = " ") {
const chars = input.split("");
const code = chars.map((c) => code128b.findIndex((p) => p.char == c) ?? 0);
code.unshift(104);
const checksum =
(104 + code.reduce((acc, code, i) => acc + code * i, 0)) % 103;
code.push(checksum);
code.push(106);
return binaryToSpoilers(
code.map((v) => code128b[v].pattern ?? "ERROR").join(""),
spacer
);
}
const spaces = {
hair: " ",
thin: " ",
normal: " ",
underscore: "_"
};
console.log(convert("REPLACEME", spaces["hair"] ?? "X"));
const code128b = [
{ char: " ", pattern: "11011001100" },
{ char: "!", pattern: "11001101100" },
{ char: '"', pattern: "11001100110" },
{ char: "#", pattern: "10010011000" },
{ char: "$", pattern: "10010001100" },
{ char: "%", pattern: "10001001100" },
{ char: "&", pattern: "10011001000" },
{ char: "'", pattern: "10011000100" },
{ char: "(", pattern: "10001100100" },
{ char: ")", pattern: "11001001000" },
{ char: "*", pattern: "11001000100" },
{ char: "+", pattern: "11000100100" },
{ char: ",", pattern: "10110011100" },
{ char: "-", pattern: "10011011100" },
{ char: ".", pattern: "10011001110" },
{ char: "/", pattern: "10111001100" },
{ char: "0", pattern: "10011101100" },
{ char: "1", pattern: "10011100110" },
{ char: "2", pattern: "11001110010" },
{ char: "3", pattern: "11001011100" },
{ char: "4", pattern: "11001001110" },
{ char: "5", pattern: "11011100100" },
{ char: "6", pattern: "11001110100" },
{ char: "7", pattern: "11101101110" },
{ char: "8", pattern: "11101001100" },
{ char: "9", pattern: "11100101100" },
{ char: ":", pattern: "11100100110" },
{ char: ";", pattern: "11101100100" },
{ char: "<", pattern: "11100110100" },
{ char: "=", pattern: "11100110010" },
{ char: ">", pattern: "11011011000" },
{ char: "?", pattern: "11011000110" },
{ char: "@", pattern: "11000110110" },
{ char: "A", pattern: "10100011000" },
{ char: "B", pattern: "10001011000" },
{ char: "C", pattern: "10001000110" },
{ char: "D", pattern: "10110001000" },
{ char: "E", pattern: "10001101000" },
{ char: "F", pattern: "10001100010" },
{ char: "G", pattern: "11010001000" },
{ char: "H", pattern: "11000101000" },
{ char: "I", pattern: "11000100010" },
{ char: "J", pattern: "10110111000" },
{ char: "K", pattern: "10110001110" },
{ char: "L", pattern: "10001101110" },
{ char: "M", pattern: "10111011000" },
{ char: "N", pattern: "10111000110" },
{ char: "O", pattern: "10001110110" },
{ char: "P", pattern: "11101110110" },
{ char: "Q", pattern: "11010001110" },
{ char: "R", pattern: "11000101110" },
{ char: "S", pattern: "11011101000" },
{ char: "T", pattern: "11011100010" },
{ char: "U", pattern: "11011101110" },
{ char: "V", pattern: "11101011000" },
{ char: "W", pattern: "11101000110" },
{ char: "X", pattern: "11100010110" },
{ char: "Y", pattern: "11101101000" },
{ char: "Z", pattern: "11101100010" },
{ char: "[", pattern: "11100011010" },
{ char: "\\", pattern: "11101111010" },
{ char: "]", pattern: "11001000010" },
{ char: "^", pattern: "11110001010" },
{ char: "_", pattern: "10100110000" },
{ char: "`", pattern: "10100001100" },
{ char: "a", pattern: "10010110000" },
{ char: "b", pattern: "10010000110" },
{ char: "c", pattern: "10000101100" },
{ char: "d", pattern: "10000100110" },
{ char: "e", pattern: "10110010000" },
{ char: "f", pattern: "10110000100" },
{ char: "g", pattern: "10011010000" },
{ char: "h", pattern: "10011000010" },
{ char: "i", pattern: "10000110100" },
{ char: "j", pattern: "10000110010" },
{ char: "k", pattern: "11000010010" },
{ char: "l", pattern: "11001010000" },
{ char: "m", pattern: "11110111010" },
{ char: "n", pattern: "11000010100" },
{ char: "o", pattern: "10001111010" },
{ char: "p", pattern: "10100111100" },
{ char: "q", pattern: "10010111100" },
{ char: "r", pattern: "10010011110" },
{ char: "s", pattern: "10111100100" },
{ char: "t", pattern: "10011110100" },
{ char: "u", pattern: "10011110010" },
{ char: "v", pattern: "11110100100" },
{ char: "w", pattern: "11110010100" },
{ char: "x", pattern: "11110010010" },
{ char: "y", pattern: "11011011110" },
{ char: "z", pattern: "11011110110" },
{ char: "{", pattern: "11110110110" },
{ char: "|", pattern: "10101111000" },
{ char: "}", pattern: "10100011110" },
{ char: "~", pattern: "10001011110" },
{ char: "DEL", pattern: "10111101000" },
{ char: "FNC 3", pattern: "10111100010" },
{ char: "FNC 2", pattern: "11110101000" },
{ char: "Shift A", pattern: "11110100010" },
{ char: "Code C", pattern: "10111011110" },
{ char: "FNC 4", pattern: "10111101110" },
{ char: "Code A", pattern: "11101011110" },
{ char: "FNC 1", pattern: "11110101110" },
{ char: "START A", pattern: "11010000100" },
{ char: "START B", pattern: "11010010000" },
{ char: "START C", pattern: "11010011100" },
{ char: "STOP", pattern: "1100011101011" },
{ char: "REVERSE STOP", pattern: "11010111000" },
];
function binaryToSpoilers(code: string, spacer: string) {
return code
.replace(/1/g, "||" + spacer + "||")
.replace(/0/g, spacer)
.replace(/\|\|\|\|/g, "");
}
function convert(input: string, spacer: string = " ") {
const chars = input.split("");
const code = chars.map((c) => code128b.findIndex((p) => p.char == c) ?? 0);
code.unshift(104);
const checksum =
(104 + code.reduce((acc, code, i) => acc + code * i, 0)) % 103;
code.push(checksum);
code.push(106);
return binaryToSpoilers(
code.map((v) => code128b[v].pattern ?? "ERROR").join(""),
spacer
);
}
const spaces = {
hair: " ",
thin: " ",
normal: " ",
underscore: "_"
};
console.log(convert(Deno.args[0], spaces[Deno.args[1] ?? "hair"] ?? "X"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment