Skip to content

Instantly share code, notes, and snippets.

@meew0
Created March 24, 2016 21:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save meew0/d6c02cd156ad84869d58 to your computer and use it in GitHub Desktop.
Save meew0/d6c02cd156ad84869d58 to your computer and use it in GitHub Desktop.
module Elgyem::Agarify
extend ElgyemCommand
AGAR_ALPHABETS = [
# Exclude the boxed letters because they can look weird in Discord
# [9398, 9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420, 9421, 9422, 9423],
# [9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449],
[945, 1074, 162, 8706, 1108, 402, 103, 1085, 953, 1504, 1082, 8467, 1084, 951, 963, 961, 113, 1103, 1109, 1090, 965, 957, 969, 967, 1091, 122],
[65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338],
[65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370],
[5609, 5623, 5205, 5610, 5620, 5556, 484, 5500, 5029, 5262, 5845, 5290, 5616, 5198, 5597, 5229, 586, 5511, 5397, 19973, 5196, 5167, 5615, 5741, 435, 437],
[916, 946, 262, 272, 8364, 8497, 5046, 294, 407, 308, 1180, 321, 924, 327, 216, 420, 937, 344, 350, 358, 7918, 86, 372, 1046, 165, 381],
[3588, 3666, 962, 3668, 1108, 358, 65262, 1106, 3648, 1503, 1082, 108, 3667, 3616, 3663, 1511, 7907, 1075, 3619, 116, 3618, 1513, 3628, 1488, 1509, 122],
[945, 1074, 99, 8706, 949, 1171, 103, 1085, 953, 1504, 1082, 8467, 1084, 951, 963, 961, 113, 1103, 115, 1090, 965, 118, 969, 120, 1199, 122],
[940, 1074, 962, 273, 941, 1171, 291, 295, 943, 1112, 311, 315, 1084, 942, 972, 961, 113, 341, 351, 355, 249, 957, 974, 120, 1095, 382],
[195, 946, 268, 270, 7864, 401, 286, 292, 302, 308, 1036, 313, 1019, 327, 7894, 420, 490, 344, 348, 356, 471, 1142, 372, 1046, 1038, 379],
[120094, 120095, 120096, 120097, 120098, 120099, 120100, 120101, 120102, 120103, 120104, 120105, 120106, 120107, 120108, 120109, 120110, 120111, 120112, 120113, 120114, 120115, 120116, 120117, 120118, 120119],
[120042, 120043, 120044, 120045, 119942, 119943, 120048, 120049, 120050, 120051, 120052, 120053, 120054, 120055, 120056, 120057, 120058, 120059, 120060, 120061, 120062, 120063, 120064, 120065, 120066, 120067],
[119990, 119991, 119992, 119993, 119890, 119995, 119892, 119997, 119998, 119999, 120000, 120001, 120002, 120003, 119900, 120005, 120006, 120007, 120008, 120009, 120010, 120011, 120012, 120013, 120014, 120015],
[120016, 120017, 120018, 120019, 120020, 120021, 120022, 120023, 120024, 120025, 120026, 120027, 120028, 120029, 120030, 120031, 120032, 120033, 120034, 120035, 120036, 120037, 120038, 120039, 120040, 120041],
[119808, 119809, 119810, 119811, 119812, 119813, 119814, 119815, 119816, 119817, 119818, 119819, 119820, 119821, 119822, 119823, 119824, 119825, 119826, 119827, 119828, 119829, 119830, 119831, 119832, 119833],
[119834, 119835, 119836, 119837, 119838, 119839, 119840, 119841, 119842, 119843, 119844, 119845, 119846, 119847, 119848, 119849, 119850, 119851, 119852, 119853, 119854, 119855, 119856, 119857, 119858, 119859],
[120120, 120121, 8450, 120123, 120124, 120125, 120126, 8461, 120128, 120129, 120130, 120131, 120132, 8469, 120134, 8473, 8474, 8477, 120138, 120139, 120140, 120141, 120142, 120143, 120144, 8484],
[120146, 120147, 120148, 120149, 120150, 120151, 120152, 120153, 120154, 120155, 120156, 120157, 120158, 120159, 120160, 120161, 120162, 120163, 120164, 120165, 120166, 120167, 120168, 120169, 120170, 120171],
[7491, 7495, 7580, 7496, 7497, 7584, 7501, 688, 7588, 690, 7503, 737, 7504, 7600, 7506, 7510, 7520, 691, 738, 7511, 7512, 7515, 695, 739, 696, 7611],
[592, 113, 596, 112, 477, 607, 387, 613, 33, 638, 670, 1503, 623, 117, 111, 100, 98, 633, 115, 647, 110, 652, 653, 120, 654, 122]
]
AGAR_NUMBERS = [
[65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305],
[216, 10102, 10103, 10104, 10105, 10106, 10107, 10108, 10109, 10110],
[7894, 10112, 10113, 10114, 10115, 10116, 10117, 10118, 10119, 10120]
]
AGAR_PARENS = [
[65288, 65289],
[12304, 12305],
[12310, 12311],
[12312, 12313],
[12314, 12315],
[8810, 8811],
[8826, 8827],
[8828, 8829],
[8830, 8831],
[8924, 8925],
[8926, 8927],
[8912, 8913],
[8834, 8835],
[8847, 8848],
[8849, 8850],
[9790, 9789],
[2919, 2920],
[12298, 12299],
[10999, 11000],
[440, 439],
[10094, 10095],
[10096, 10097],
[10100, 10101],
[5547, 5549],
[5652, 5653],
[8261, 8262],
[9654, 9664],
[9655, 9665]
]
AGAR_LETTERLIKE = [
8450, 8461, 8469, 8473, 8474, 8477, 8484, 11362, 11363, 425, 400, 423, 424, 8475, 8476, 581, 8455, 415, 398, 423,
404, 1048, 926, 931, 1071, 1021, 5096, 5107, 5066, 7438, 8362, 162, 353, 164, 223, 631, 926, 931, 1120, 1138, 1150,
65505, 65509, 65510, 8362, 8486, 8492, 8475, 11363
]
AGAR_SYMBOLS = [
65281, 65282, 65283, 65284, 65285, 65286, 65287, 65290, 65291, 65292, 65293, 10023, 65295, 65306,
65307, 65308, 65309, 65310, 65311, 65312, 65339, 65340, 65341, 65375, 65376, 65131, 59244,
9812, 9813, 9814, 9815, 9816, 9817, 9818, 9819, 9820, 9821, 9822, 9823, 9824, 9825, 9826, 9827, 9828, 9829, 9830, 9831, 9832, 9833, 9834, 9836, 9733, 9734,
9618, 9619, 9608, 9607, 9606, 9605, 9604, 9603, 9602, 9601, 9754, 9755, 9756, 9757, 9758, 9759, 9760, 9762, 9774, 9775, 9785, 9786,
8482, 174, 169, 171, 187, 5835, 8224, 8225, 9973, 9994, 9995, 9996, 10024, 10025, 10026, 10027, 10028, 10029, 10030, 10031, 10032, 10022,
10033, 10034, 10035, 10036, 10037, 10038, 10039, 10040, 10041, 10042, 10043, 10044, 10045, 10046, 10047, 10048, 10049, 10050, 10051, 10052,
1757, 1758, 1769, 2794, 3024, 3303, 3313, 3424, 7461, 12484,
526, 527, 664, 1835, 3526, 3471, 3572, 4034, 9996, 4036, 4037, 4039, 4040, 4041, 4042, 9685, 8255,
9803, 9807, 9792, 9794, 50883, 9504, 9512, 9568, 9571,
9609, 9610, 9611, 9612, 9613, 9614, 9615, 9616, 9620, 9621, 9632, 9644, 9600, 9604, 9680, 9681, 9682, 9683, 9703, 9704, 9705, 9706,
9770, 9773,
128526, 128541, 128514, 128520, 128545, 128562, 128563, 127828, 127839, 127849, 127875, 127876, 127877, 128035, 128036, 128077, 128074, 128123, 128125, 128110, 128142, 128139, 128099, 128128, 128162, 128293,
128574, 128570, 127827, 127799, 127847, 127850, 127851, 127852, 127853, 127854, 127880, 127881, 127872, 127873, 127942, 127919, 128040, 128032, 128031, 128039, 128013, 128076, 128058, 128059, 128060, 128047,
9986, 9988, 9989, 9998, 9999, 10000, 10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, 10011, 10012, 10013, 10014, 10015, 10016, 10017, 10018, 10019, 10020,
128025, 128009, 128010, 128018, 128029, 128028, 128026, 128050, 128051, 128056, 128081, 128121, 128122, 128100, 128178, 128163, 128153, 128154, 128155, 128156, 128157, 128151, 128152, 128158, 128148, 128165
]
# Utility function to wrap something in a pair of agar parentheses
def self.wrap(inner, parens)
[parens.first] + inner + [parens.last]
end
# Generate a random letter or letterlike symbol
def self.letter_or_letterlike
if rand < 0.5
# Letter
AGAR_ALPHABETS.sample.sample
else
# Letterlike
AGAR_LETTERLIKE.sample
end
end
# An agar clan name consists of one or two pairs of parentheses around a random string of letters and letterlike symbols, with optionally a regular symbol at the end.
def self.agar_clan
# 3-4 letters or letterlikes
inner = [*0..(rand(3..4))].map { letter_or_letterlike }
# Optional symbol
inner += [AGAR_SYMBOLS.sample] if rand < 0.5
# Parentheses
clan = wrap(inner, AGAR_PARENS.sample)
# Sometimes a second pair
clan = wrap(clan, AGAR_PARENS.sample) if rand < 0.25
clan
end
# Agar letter for a specific character
def self.letter_for(char)
char.upcase!
idx = char.ord - 'A'.ord
AGAR_ALPHABETS.sample[idx]
end
# Agar number for a specific character
def self.number_for(char)
AGAR_NUMBERS.sample[char.to_i]
end
# Partially agarify a string by replacing letters and numbers with respective agar symbols
def self.agar_replace(str)
str.chars.map do |char|
if char =~ /[a-zA-Z]/
letter_for(char)
elsif char =~ /[0-9]/
number_for(char)
else
AGAR_SYMBOLS.sample
end
end
end
# Generate 0-2 symbols, with 0 being more likely than 1 or 2
def self.generate_symbols
if rand > 0.5
[]
else
[*0..(rand(1..2))].map { AGAR_SYMBOLS.sample }
end
end
# Add symbols randomly at the beginning and end
def self.add_symbols(ary)
generate_symbols + ary + generate_symbols
end
# Completely agarify a string
def self.agarify(str)
clan = agar_clan
replaced = agar_replace(str)
replaced = add_symbols(replaced)
# Rarely, add the clan again at the end
replaced += clan if rand < 0.15
# Add the clan at the beginning
clan + replaced
end
command :agarify do |event, *str|
agarify(str.join(' ')).pack('U*')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment