From e6f6c2340c1ed1a5ebb1f043d5f702d5cdcfd98a Mon Sep 17 00:00:00 2001 From: decoded Date: Sun, 11 Jul 2021 08:13:54 +0000 Subject: [PATCH] update --- README.md | 8 +- dr1ppl3.s1x_1.of.4_ratesex_plugin.py | 238 ++++++++++++++++++++++++ dr1ppl3.s1x_2.of.4_color_of_gravity.py | 177 ++++++++++++++++++ dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py | 55 ++++++ dr1ppl3.s1x_4.of.4_f1f0.p1p3.py | 164 ++++++++++++++++ extract.py | 176 ++++++++++++++++++ 6 files changed, 817 insertions(+), 1 deletion(-) create mode 100644 dr1ppl3.s1x_1.of.4_ratesex_plugin.py create mode 100644 dr1ppl3.s1x_2.of.4_color_of_gravity.py create mode 100644 dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py create mode 100644 dr1ppl3.s1x_4.of.4_f1f0.p1p3.py create mode 100644 extract.py diff --git a/README.md b/README.md index c3bdf34..bbd88a7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ # t00lz -logic to be dropped in at a later point, or general tools \ No newline at end of file +logic to be dropped in at a later point, or general tools + +dr1ppl3.s1x_1.of.4_ratesex_plugin.py - original logic written in 4 parts for g1mp/plugins/ratesex_plugin.py +dr1ppl3.s1x_2.of.4_color_of_gravity.py - original logic written in 4 parts for g1mp/plugins/ratesex_plugin.py +dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py - original logic written in 4 parts for g1mp/plugins/ratesex_plugin.py +dr1ppl3.s1x_4.of.4_f1f0.p1p3.py - original logic written in 4 parts for g1mp/plugins/ratesex_plugin.py +extract.py - testing line controlcodes to color codes diff --git a/dr1ppl3.s1x_1.of.4_ratesex_plugin.py b/dr1ppl3.s1x_1.of.4_ratesex_plugin.py new file mode 100644 index 0000000..f50cca4 --- /dev/null +++ b/dr1ppl3.s1x_1.of.4_ratesex_plugin.py @@ -0,0 +1,238 @@ +motd = """ +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh+MMMMMMMMMMMMMMhsMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm/ oMMMMMMMMMMMMMMm +NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy` yMMMMMMMMMMMMMMM- -mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMs+dMMMMMMMMMM+ sMMMMMMMMMMMMMMM- `dMMMMMMMMMMms/NMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMM+ .omMMMMMM: -MMMMMMMMMMMMMMo `yMMMMMMMy: `dMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMM- /dMMM+ sMMMMMMMMMMMMh `hMMMNo` sMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMd :dm `mMMMMMMMMMMN. .NNo` .MMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMM: - :MMMMMMMMMMs :` sMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMs ymNMMMMMNm. NMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMy `-/-` .MMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMo .NMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMNh+. :sdMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMhso+:. `-/+syMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMM- dMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMM` `.:+/. `/s+:. sMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMNo -oms. .//-` `:/:` `+md+` .hMMMMMMMMMMMMMMM +MMMMMMMMMMMMMNs` .odNdo. .ohmd+` :dMMMMMMMMMMMMM +MMMMMMMMMMMNo` .. .- :hMMMMMMMMMMM +MMMMMMMMMd+` -sNMMMMMMMM +MMMMMMNs- `.. `/-. `+dMMMMMM +MMMNy: ./sdNMMMh: `sNMMMNds/. .odMMM +MM+ :ymMMMMMMMMMMh. +NMMMMMMMMMMmo- /NM +MMMh: .sNMMMMMMMMMMMMMMN- `hMMMMMMMMMMMMMMMm+` :hMMM +MMMMMd:` ``-:+shmMMMMMMMMMMMMMMMMMMN. hMMMMMMMMMMMMMMMMMMMmhs+/-..``````./dMMMMM +MMMMMMMMMNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMo .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN. /MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN+` `+NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNs. -hMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMdyymMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM +""" + +import sys +import re +from urllib.request import Request, urlopen +from urllib.error import URLError, HTTPError +import ipdb + + # color conversion lut, say html'd as " │ ⣧⠃ " or control coded for curl as \x1b[38;5;196. both are same valuees + # 196 is what i see, so roll through the lut, 196 is 52 which is hex so its really int of 82.. what that means is #ff0000, red af. the bottom + # graph is red, 196 for whatever terminal stuff, ff0000 for whatever css/markup interpreter but on irc its out side the 16 base colors, the + # chart for 16-98 color codes will reflect this. https://modern.ircdocs.horse/formatting.html.. 196 == 52 == ff0000 == red as fuck. now the + # problem is there are more diverse colors used then what we have available through irc so rather then be lazy an color blind you want the + # closest color to within the options we have. so that is the point of all the lut/gravity. .[d]. + + # terminal color vs irc color +rgb2irc = { 52: '16', 94: '17', 100: '18', 58: '19', 22: '20', 29: '21', 23: '22', 24: '23', 17: '24', 54: '25', 53: '26', 89: '27', + 88: '28', 130: '29', 142: '30', 64: '31', 28: '32', 35: '33', 30: '34', 25: '35', 18: '36', 91: '37', 90: '38', 125: '39', + 124: '40', 166: '41', 184: '42', 106: '43', 34: '44', 49: '45', 37: '46', 33: '47', 19: '48', 129: '49', 127: '50', 161: '51', + 196: '52', 208: '53', 226: '54', 154: '55', 46: '56', 86: '57', 51: '58', 75: '59', 21: '60', 171: '61', 201: '62', 198: '63', + 203: '64', 215: '65', 227: '66', 191: '67', 83: '68', 122: '69', 87: '70', 111: '71', 63: '72', 177: '73', 207: '74', 205: '75', + 217: '76', 223: '77', 229: '78', 193: '79', 157: '80', 158: '81', 159: '82', 153: '83', 147: '84', 183: '85', 219: '86', 212: '87', + 16: '88', 233: '89', 235: '90', 237: '91', 239: '92', 241: '93', 244: '94', 247: '95', 250: '96', 254: '97', 231: '98', } + + # same terminal color vs rgb values +set2rgb = { 52: '#470000', 94: '#472100', 100: '#474700', 58: '#324700', 22: '#004700', 29: '#00472C', 23: '#004747', 24: '#002747', 17: '#000047', 54: '#2E0047', 53: '#470047', 89: '#47002A', + 88: '#740000', 130: '#743A00', 142: '#747400', 64: '#517400', 28: '#007400', 35: '#007449', 30: '#007474', 25: '#004074', 18: '#000074', 91: '#4B0074', 90: '#740074', 125: '#740045', + 124: '#B50000', 166: '#B56300', 184: '#B5B500', 106: '#7DB500', 34: '#00B500', 49: '#00B571', 37: '#00B5B5', 33: '#0063B5', 19: '#0000B5', 129: '#7500B5', 127: '#B500B5', 161: '#B5006B', + 196: '#FF0000', 208: '#FF8C00', 226: '#FFFF00', 154: '#B2FF00', 46: '#00FF00', 86: '#00FFA0', 51: '#00FFFF', 75: '#008CFF', 21: '#0000FF', 171: '#A500FF', 201: '#FF00FF', 198: '#FF0098', + 203: '#FF5959', 215: '#FFB459', 227: '#FFFF71', 191: '#CFFF60', 83: '#6FFF6F', 122: '#65FFC9', 87: '#6DFFFF', 111: '#59B4FF', 63: '#5959FF', 177: '#C459FF', 207: '#FF66FF', 205: '#FF59BC', + 217: '#FF9C9C', 223: '#FFD39C', 229: '#FFFF9C', 193: '#E2FF9C', 157: '#9CFF9C', 158: '#9CFFDB', 159: '#9CFFFF', 153: '#9CD3FF', 147: '#9CD3FF', 183: '#DC9CFF', 219: '#FF9CFF', 212: '#FF94D3', + 16: '#000000', 233: '#131313', 235: '#282828', 237: '#363636', 239: '#4D4D4D', 241: '#656565', 244: '#818181', 247: '#9F9F9F', 250: '#BCBCBC', 254: '#E2E2E2', 231: '#FFFFFF', } + + # the color system used by the grapher, also the rgb values to coincide. now can reverse their color codes to ansi color codes to irc color codes, just gotta find colors + # close enough now so that its not some puke ass colors looking like some 70s show. +rgb2set = { "ef0": "#000000", "ef1": "#CD0000", "ef2": "#00CD00", "ef3": "#CDCD00", "ef4": "#0000EE", "ef5": "#CD00CD", "ef6": "#00CDCD", "ef7": "#E5E5E5", + "ef8": "#7F7F7F", "ef9": "#FF0000", "ef10": "#00FF00", "ef11": "#FFFF00", "ef12": "#5C5CFF", "ef13": "#FF00FF", "ef14": "#00FFFF", "ef15": "#FFFFFF", + "eb8": "#7F7F7F", "eb9": "#FF0000", "eb10": "#00FF00", "eb11": "#FFFF00", "eb12": "#5C5CFF", "eb13": "#FF00FF", "eb14": "#00FFFF", "eb15": "#FFFFFF", "ef16": "#000000", + "ef17": "#00005f", "ef18": "#000087", "ef19": "#0000af", "ef20": "#0000d7", "ef21": "#0000ff", "ef22": "#005f00", "ef23": "#005f5f", "ef24": "#005f87", "ef25": "#005faf", + "ef26": "#005fd7", "ef27": "#005fff", "ef28": "#008700", "ef29": "#00875f", "ef30": "#008787", "ef31": "#0087af", "ef32": "#0087d7", "ef33": "#0087ff", "ef34": "#00af00", + "ef35": "#00af5f", "ef36": "#00af87", "ef37": "#00afaf", "ef38": "#00afd7", "ef39": "#00afff", "ef40": "#00d700", "ef41": "#00d75f", "ef42": "#00d787", "ef43": "#00d7af", + "ef44": "#00d7d7", "ef45": "#00d7ff", "ef46": "#00ff00", "ef47": "#00ff5f", "ef48": "#00ff87", "ef49": "#00ffaf", "ef50": "#00ffd7", "ef51": "#00ffff", "ef52": "#5f0000", + "ef53": "#5f005f", "ef54": "#5f0087", "ef55": "#5f00af", "ef56": "#5f00d7", "ef57": "#5f00ff", "ef58": "#5f5f00", "ef59": "#5f5f5f", "ef60": "#5f5f87", "ef61": "#5f5faf", + "ef62": "#5f5fd7", "ef63": "#5f5fff", "ef64": "#5f8700", "ef65": "#5f875f", "ef66": "#5f8787", "ef67": "#5f87af", "ef68": "#5f87d7", "ef69": "#5f87ff", "ef70": "#5faf00", + "ef71": "#5faf5f", "ef72": "#5faf87", "ef73": "#5fafaf", "ef74": "#5fafd7", "ef75": "#5fafff", "ef76": "#5fd700", "ef77": "#5fd75f", "ef78": "#5fd787", "ef79": "#5fd7af", + "ef80": "#5fd7d7", "ef81": "#5fd7ff", "ef82": "#5fff00", "ef83": "#5fff5f", "ef84": "#5fff87", "ef85": "#5fffaf", "ef86": "#5fffd7", "ef87": "#5fffff", "ef88": "#870000", + "ef89": "#87005f", "ef90": "#870087", "ef91": "#8700af", "ef92": "#8700d7", "ef93": "#8700ff", "ef94": "#875f00", "ef95": "#875f5f", "ef96": "#875f87", "ef97": "#875faf", + "ef98": "#875fd7", "ef99": "#875fff", "ef100": "#878700", "ef101": "#87875f", "ef102": "#878787", "ef103": "#8787af", "ef104": "#8787d7", "ef105": "#8787ff", "ef106": "#87af00", + "ef107": "#87af5f", "ef108": "#87af87", "ef109": "#87afaf", "ef110": "#87afd7", "ef111": "#87afff", "ef112": "#87d700", "ef113": "#87d75f", "ef114": "#87d787", "ef115": "#87d7af", + "ef116": "#87d7d7", "ef117": "#87d7ff", "ef118": "#87ff00", "ef119": "#87ff5f", "ef120": "#87ff87", "ef121": "#87ffaf", "ef122": "#87ffd7", "ef123": "#87ffff", "ef124": "#af0000", + "ef125": "#af005f", "ef126": "#af0087", "ef127": "#af00af", "ef128": "#af00d7", "ef129": "#af00ff", "ef130": "#af5f00", "ef131": "#af5f5f", "ef132": "#af5f87", "ef133": "#af5faf", + "ef134": "#af5fd7", "ef135": "#af5fff", "ef136": "#af8700", "ef137": "#af875f", "ef138": "#af8787", "ef139": "#af87af", "ef140": "#af87d7", "ef141": "#af87ff", "ef142": "#afaf00", + "ef143": "#afaf5f", "ef144": "#afaf87", "ef145": "#afafaf", "ef146": "#afafd7", "ef147": "#afafff", "ef148": "#afd700", "ef149": "#afd75f", "ef150": "#afd787", "ef151": "#afd7af", + "ef152": "#afd7d7", "ef153": "#afd7ff", "ef154": "#afff00", "ef155": "#afff5f", "ef156": "#afff87", "ef157": "#afffaf", "ef158": "#afffd7", "ef159": "#afffff", "ef160": "#d70000", + "ef161": "#d7005f", "ef162": "#d70087", "ef163": "#d700af", "ef164": "#d700d7", "ef165": "#d700ff", "ef166": "#d75f00", "ef167": "#d75f5f", "ef168": "#d75f87", "ef169": "#d75faf", + "ef170": "#d75fd7", "ef171": "#d75fff", "ef172": "#d78700", "ef173": "#d7875f", "ef174": "#d78787", "ef175": "#d787af", "ef176": "#d787d7", "ef177": "#d787ff", "ef178": "#d7af00", + "ef179": "#d7af5f", "ef180": "#d7af87", "ef181": "#d7afaf", "ef182": "#d7afd7", "ef183": "#d7afff", "ef184": "#d7d700", "ef185": "#d7d75f", "ef186": "#d7d787", "ef187": "#d7d7af", + "ef188": "#d7d7d7", "ef189": "#d7d7ff", "ef190": "#d7ff00", "ef191": "#d7ff5f", "ef192": "#d7ff87", "ef193": "#d7ffaf", "ef194": "#d7ffd7", "ef195": "#d7ffff", "ef196": "#ff0000", + "ef197": "#ff005f", "ef198": "#ff0087", "ef199": "#ff00af", "ef200": "#ff00d7", "ef201": "#ff00ff", "ef202": "#ff5f00", "ef203": "#ff5f5f", "ef204": "#ff5f87", "ef205": "#ff5faf", + "ef206": "#ff5fd7", "ef207": "#ff5fff", "ef208": "#ff8700", "ef209": "#ff875f", "ef210": "#ff8787", "ef211": "#ff87af", "ef212": "#ff87d7", "ef213": "#ff87ff", "ef214": "#ffaf00", + "ef215": "#ffaf5f", "ef216": "#ffaf87", "ef217": "#ffafaf", "ef218": "#ffafd7", "ef219": "#ffafff", "ef220": "#ffd700", "ef221": "#ffd75f", "ef222": "#ffd787", "ef223": "#ffd7af", + "ef224": "#ffd7d7", "ef225": "#ffd7ff", "ef226": "#ffff00", "ef227": "#ffff5f", "ef228": "#ffff87", "ef229": "#ffffaf", "ef230": "#ffffd7", "ef231": "#ffffff", "ef232": "#080808", + "ef233": "#121212", "ef234": "#1c1c1c", "ef235": "#262626", "ef236": "#303030", "ef237": "#3a3a3a", "ef238": "#444444", "ef239": "#4e4e4e", "ef240": "#585858", "ef241": "#626262", + "ef242": "#6c6c6c", "ef243": "#767676", "ef244": "#808080", "ef245": "#8a8a8a", "ef246": "#949494", "ef247": "#9e9e9e", "ef248": "#a8a8a8", "ef249": "#b2b2b2", "ef250": "#bcbcbc", + "ef251": "#c6c6c6", "ef252": "#d0d0d0", "ef253": "#dadada", "ef254": "#e4e4e4", "ef255": "#eeeeee", } + +twobitgfx = { 226: 0, 214: 0, 220: 0, 208: 0, 202: 0, 196: 0, 190: 0, 154: 0, 118: 0, 82: 0, 51: 0, 50: 0, 49: 0, 48: 0, 47: 0, 46: 0, } + +# fast value flipping for comparison +def invert_dict(d): + return {v: k for k, v in d.items()} + +# index may be relative +def enumerate_dict(d): + return list(zip(list(d),list(invert_dict(d)),range(len(d)))) + +# to find values we wan to be closet too if not exact, well 1 number is easy.. 20 is close to 25.. but this rgb, there are 3 values.. +# being close on one value means nothing if you are far off on others. so organize the values for r, then g and b and find the minimum +# per each and figure out the best average between the 3.. then, thats the color you want. 24bit is nice or whatever but only have +# inbetween colors. +def organize_dict(d): + _d=list(d.values()) + return _d.sort() + +def byte_range(s,x,y): + b='' + n=0 + for _ in s[x:y]: + b += hex(ord(_))[2:] + n += 1 + if n > 15: + b += '\n' + n = 0 + return(b) + b = '' + else: + print(b) + +def escape_ansi(line): + ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]') + return ansi_escape.sub('', str(line)) + +# rest.sx responds differently depending on your user-agent. it will respond with html code or control code.. browser vs curl uagent. +# this is why you see op1 and op2 +USER_AGENT_BROWSER="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36" +USER_AGENT_CURL="curl/7.29.0" +STATUS_BAD_CODE=":( - error code: {}" +STATUS_BAD_REASON=":( - failed reason: {}" +STATUS_OK=":)" + +# html response using browser uagent +def op1(commands): + url = f"https://rate.sx/{commands}" + r = Request(url,data=None,headers={ 'User-Agent': USER_AGENT_BROWSER }) + try: + response = urlopen(r,timeout=10).read().decode('utf-8') + except HTTPError as e: + return STATUS_BAD_CODE.format(e.code) + except URLError as e: + return STATUS_BAD_REASON.format(e.reason) + else: + print(response) + return STATUS_OK + response + +# controlcodes response using curl uagent, utf8 +def op2(commands): + url = f"https://rate.sx/{commands}" + r = Request(url,data=None,headers={ 'User-Agent': USER_AGENT_CURL }) + try: + response = urlopen(r,timeout=10).read().decode('utf-8') + except HTTPError as e: + return STATUS_BAD_CODE.format(e.code) + except URLError as e: + return STATUS_BAD_REASON.format(e.reason) + else: + print(response) + return STATUS_OK + response + +# function that will determine closest color to choose +def hex2gravity(h): + r,g,b=int(h[1:3],16),int(h[3:5],16),int(h[5:7],16) + o=list(set2rgb.values()); o.sort() + R,G,B=[int(x[1:][0:2],16) for x in o],[int(x[1:][2:4],16) for x in o],[int(x[1:][4:6],16) for x in o] + _r = min(r,key=lambda x:abs(x-R)) + _g = min(g,key=lambda x:abs(x-G)) + _b = min(b,key=lambda x:abs(x-B)) + +# function popping out all the control codes and reinserting irc color codes instead. the lenghts may be different +# it could be out of alignment hence why im count bytes up front. im sure it will be a problem later. +def stage2(response): + g = response # site response + s = '' # buffer to snip + b = '' # buffer original copy + z = [] # data popped index + i = [] # offset of data popped index + d = [] # distance of data popped from each offset + n = [] # newline storage + + for _ in g: + s = s + ''.join(_) # response joined to snip buffer + b = b + ''.join(_) # response joined to original backup buffer + try: # loop until error + B=escape_ansi(s).replace('\x1b(B','') + f = open('/run/irc3/tcpdirect','w') + for _ in B: + f.write(_) + f.close() + # y=0 + # _n = 0 + # n.append(0) + # while not _n == -1: + # #print(f"snip buffer length: {len(s)}") + # _n = s.find('\n',_n) + # if not _n == -1: + # print(_n) + # _n+=1 + # n.append(_n) + # ipdb.set_trace() + # byte_range(s,n[-2],n[-1]) + # else: + # break + # x = s.find('\x1b',y+1) # head of data to pop + # y = s.find('m') + 1 # tail of data to pop + # #ipdb.set_trace() + # if x == -1 or y == -1: + # break + # if len(s[x:y]) <= 1: + # ipdb.set_trace() + # z.append( s[x:y] ) # keep popping out data + # i.append( x ) # store the base offset of each control code + # d.append( x+y-1 ) # store the distance/length of control code to rebuild into aligment + # n.append(_n) + # print(s) + # #s = s[y:] # keep trimming snip buffer + except Exception as e: # error is ok, it means nothing to pop + print(f'potential error: {e}') + + ipdb.set_trace() + + +# program entry point calling on mains +if __name__ == "__main__": + op1(sys.argv[1]) + response=op2(sys.argv[1]) + stage2(response[2:]) + diff --git a/dr1ppl3.s1x_2.of.4_color_of_gravity.py b/dr1ppl3.s1x_2.of.4_color_of_gravity.py new file mode 100644 index 0000000..a859594 --- /dev/null +++ b/dr1ppl3.s1x_2.of.4_color_of_gravity.py @@ -0,0 +1,177 @@ +from random import randint +import ipdb +__doc__ = ''':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::. +/mMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNd- +-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMN` +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmNMMMMMMMMMMMmMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh:NMMMMMMMMMMoyMMMMMMMMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMm -NMMMMMMMMMs.NMMMMMMMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMy -hmmmmmNNm- sMMMMMMMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmdyo+:` ```````.` .NMMMymMMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmy+-.` -hNm-+MMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMms:` `.. /MMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh/. /MMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMmMMMMMMMMMMMmhN:` /MMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMM+sNMMMMMMMMMN-h: `-+syyys/- -NMMMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMs +NMMMMMMMhm--d` :. -sdNMMMMMNNmy. :ydMMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMMMM+ :yhyyyhhso` os yhshNMMMMMMMh+:-:. :s- .NMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMMMMmho` ` `yo.h:sMMMMMMMMMMNd+. -NNs- yMMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMMMNh/. :++`-MMMMMMMMMMMMMm+` :ymds. -NMMMMMMMMMMMMMMMM- +/MMMMMMMMMMMmo- .MMMMMMMMMMMMMMMdo. `.-` yMMMMMMMMMMMMMMMM- +/MMMMMMMMMmo. `NMMMMMMMMMMMMMMMMNy/.` `mMMMMMMMMMMMMMMM- +/MMMMMMMNs. hMMMMMMMMMMMMMMMMMMMNho-` :NMMMMMMMMMMMMMM- +/MMMMMMm: ./syyyo- -hmNMMMMMMMMMMMMMMMMMMMMmho:.` /NMMMMMMMMMMMMM- +/MMMMMd. .smMMMNNNms` ` `+MMMMMMMMMMMMMMMMMMMMMMMMNdy/ `.yMMMMMMMMMMMMM- +/MMMMd. /mMMMMMy/:--` so. `mMMMMMMMMMMMMMMMMMMMMMMMNdo--:+sdNMMMMMMMMMMMMMM- +/MMMN- /NMMMMMMMMdo. oMm+. /MMMMMMMMMMMMMMMMdNMMMMMMNNNMMmMMMMMMMMMMMMMMMMM- +/MMMo -NMMMMMMMMMMdso-` /hmm+ sMMMMMMMMMMMMMMMs-mMMMMMMMMMM:dMMMMMMMMMMMMMMMM- +/MMN. sMMMMMMMMMMMo .os/.``.. `dMMMMMMMMMMMMMMs -NMMMMMMMMM-:MMMMMMMMMMMMMMMM- +/MMd mMMMMMMMMMMM/ `:os+-` .dMMMMMMMMMMMNm. -soosyhdms `mMMMMMMMMMMMMMMM- +/MMs mMMMMMMMMMMM: .hNhs/.` .dMMMMNmhs+:-` +MMMNoMMMMMMMMMM- +/MMy hMMMMMMMMMMM: oMMMMMNdyo/. .mNh+-` +mNy`mMMMMMMMMM- +/MMd +MMMMMMMMMMM/ :MMMMMMMMNs.`.:ohh/` ` mMMMMMMMMM- +/MMN. `mMMMMMMMMMMo `NMMMMMMNhhdNMMh: mMMMMMMMMM- +/MMM+ /MMMMMMMMMMh yMMMMMMMMMMMN+ `NMMMMMMMMM- +/MMMm` +MMMMMMMMMN` .NMMMMMMMMMN- :sdmNNNdy+` dMMMMMMMMM- +/MMMMo +MMMMMMMMM+ +MMMMMMMMM/ -dMMMMMMNmmNN/ .sdMMMMMMM- +/MMMMN: :mMMMMMMMm` oMMMMMMMh .mMMMMMMMms- `` /o` `mMMMMMM- +/MMMMMm. .yMMMMMMMo oMMMMMM/ sMMMMMMMMMMMh: :NNo. sMMMMMM- +/MMMMMMm. -hMMMMMN: /NMMMM. dMMMMMMMMMMMMMh- :hmNy` .NMMMMM- +/MMMMMMMm- -yNMMMm. .yMMM. dMMMMMMMMMMMMMMNh:` `..` yMMMMM- +/MMMMMMMMN+ .+hNMd. :hM: dMMMMMMMMMMMMMMMMNmo- .NMMMM- +/MMMMMMMMMMh- ./ss. `:: sMMMMMMMMMMMMMMMMMMMNms/. /MMMM- +/MMMMMMMMMMMNo. ` :MMMMMMMMMMMMMMMMMMMMMMMNdo:.` oMMM- +/MMMMMMMMMMMMMmo. `mMMMMMMMMMMMMMMMMMMMMMMMMMMNmh: .dMM- +/MMMMMMMMMMMMMMMNy:` +MMMMMMMMMMMMMMMMMMMMMMMMMMNh+::/+sdNMMM- +/MMMMMMMMMMMMMMMMMNdo- `dMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNMMMMMMMM- +/MMMMMMMMMMMMMMMMMMMMNd+-` -NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM- +-NMMMMMMMMMMMMMMMMMMMMMMNdo:` /NMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMd` +-ymNNNNNNNNNNNNNNNNNNNNNNNNdo-` +NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmy. + ............................ .-...............................` + `````` ````````` `````````````` `````````` ```''' + +rgb2irc = { 52: '16', 94: '17', 100: '18', 58: '19', 22: '20', 29: '21', 23: '22', 24: '23', 17: '24', 54: '25', 53: '26', 89: '27', + 88: '28', 130: '29', 142: '30', 64: '31', 28: '32', 35: '33', 30: '34', 25: '35', 18: '36', 91: '37', 90: '38', 125: '39', + 124: '40', 166: '41', 184: '42', 106: '43', 34: '44', 49: '45', 37: '46', 33: '47', 19: '48', 129: '49', 127: '50', 161: '51', + 196: '52', 208: '53', 226: '54', 154: '55', 46: '56', 86: '57', 51: '58', 75: '59', 21: '60', 171: '61', 201: '62', 198: '63', + 203: '64', 215: '65', 227: '66', 191: '67', 83: '68', 122: '69', 87: '70', 111: '71', 63: '72', 177: '73', 207: '74', 205: '75', + 217: '76', 223: '77', 229: '78', 193: '79', 157: '80', 158: '81', 159: '82', 153: '83', 147: '84', 183: '85', 219: '86', 212: '87', + 16: '88', 233: '89', 235: '90', 237: '91', 239: '92', 241: '93', 244: '94', 247: '95', 250: '96', 254: '97', 231: '98', } + +rgb2set = { "ef0": "#000000", "ef1": "#CD0000", "ef2": "#00CD00", "ef3": "#CDCD00", "ef4": "#0000EE", "ef5": "#CD00CD", "ef6": "#00CDCD", "ef7": "#E5E5E5", + "ef8": "#7F7F7F", "ef9": "#FF0000", "ef10": "#00FF00", "ef11": "#FFFF00", "ef12": "#5C5CFF", "ef13": "#FF00FF", "ef14": "#00FFFF", "ef15": "#FFFFFF", + "eb8": "#7F7F7F", "eb9": "#FF0000", "eb10": "#00FF00", "eb11": "#FFFF00", "eb12": "#5C5CFF", "eb13": "#FF00FF", "eb14": "#00FFFF", "eb15": "#FFFFFF", "ef16": "#000000", + "ef17": "#00005f", "ef18": "#000087", "ef19": "#0000af", "ef20": "#0000d7", "ef21": "#0000ff", "ef22": "#005f00", "ef23": "#005f5f", "ef24": "#005f87", "ef25": "#005faf", + "ef26": "#005fd7", "ef27": "#005fff", "ef28": "#008700", "ef29": "#00875f", "ef30": "#008787", "ef31": "#0087af", "ef32": "#0087d7", "ef33": "#0087ff", "ef34": "#00af00", + "ef35": "#00af5f", "ef36": "#00af87", "ef37": "#00afaf", "ef38": "#00afd7", "ef39": "#00afff", "ef40": "#00d700", "ef41": "#00d75f", "ef42": "#00d787", "ef43": "#00d7af", + "ef44": "#00d7d7", "ef45": "#00d7ff", "ef46": "#00ff00", "ef47": "#00ff5f", "ef48": "#00ff87", "ef49": "#00ffaf", "ef50": "#00ffd7", "ef51": "#00ffff", "ef52": "#5f0000", + "ef53": "#5f005f", "ef54": "#5f0087", "ef55": "#5f00af", "ef56": "#5f00d7", "ef57": "#5f00ff", "ef58": "#5f5f00", "ef59": "#5f5f5f", "ef60": "#5f5f87", "ef61": "#5f5faf", + "ef62": "#5f5fd7", "ef63": "#5f5fff", "ef64": "#5f8700", "ef65": "#5f875f", "ef66": "#5f8787", "ef67": "#5f87af", "ef68": "#5f87d7", "ef69": "#5f87ff", "ef70": "#5faf00", + "ef71": "#5faf5f", "ef72": "#5faf87", "ef73": "#5fafaf", "ef74": "#5fafd7", "ef75": "#5fafff", "ef76": "#5fd700", "ef77": "#5fd75f", "ef78": "#5fd787", "ef79": "#5fd7af", + "ef80": "#5fd7d7", "ef81": "#5fd7ff", "ef82": "#5fff00", "ef83": "#5fff5f", "ef84": "#5fff87", "ef85": "#5fffaf", "ef86": "#5fffd7", "ef87": "#5fffff", "ef88": "#870000", + "ef89": "#87005f", "ef90": "#870087", "ef91": "#8700af", "ef92": "#8700d7", "ef93": "#8700ff", "ef94": "#875f00", "ef95": "#875f5f", "ef96": "#875f87", "ef97": "#875faf", + "ef98": "#875fd7", "ef99": "#875fff", "ef100": "#878700", "ef101": "#87875f", "ef102": "#878787", "ef103": "#8787af", "ef104": "#8787d7", "ef105": "#8787ff", "ef106": "#87af00", + "ef107": "#87af5f", "ef108": "#87af87", "ef109": "#87afaf", "ef110": "#87afd7", "ef111": "#87afff", "ef112": "#87d700", "ef113": "#87d75f", "ef114": "#87d787", "ef115": "#87d7af", + "ef116": "#87d7d7", "ef117": "#87d7ff", "ef118": "#87ff00", "ef119": "#87ff5f", "ef120": "#87ff87", "ef121": "#87ffaf", "ef122": "#87ffd7", "ef123": "#87ffff", "ef124": "#af0000", + "ef125": "#af005f", "ef126": "#af0087", "ef127": "#af00af", "ef128": "#af00d7", "ef129": "#af00ff", "ef130": "#af5f00", "ef131": "#af5f5f", "ef132": "#af5f87", "ef133": "#af5faf", + "ef134": "#af5fd7", "ef135": "#af5fff", "ef136": "#af8700", "ef137": "#af875f", "ef138": "#af8787", "ef139": "#af87af", "ef140": "#af87d7", "ef141": "#af87ff", "ef142": "#afaf00", + "ef143": "#afaf5f", "ef144": "#afaf87", "ef145": "#afafaf", "ef146": "#afafd7", "ef147": "#afafff", "ef148": "#afd700", "ef149": "#afd75f", "ef150": "#afd787", "ef151": "#afd7af", + "ef152": "#afd7d7", "ef153": "#afd7ff", "ef154": "#afff00", "ef155": "#afff5f", "ef156": "#afff87", "ef157": "#afffaf", "ef158": "#afffd7", "ef159": "#afffff", "ef160": "#d70000", + "ef161": "#d7005f", "ef162": "#d70087", "ef163": "#d700af", "ef164": "#d700d7", "ef165": "#d700ff", "ef166": "#d75f00", "ef167": "#d75f5f", "ef168": "#d75f87", "ef169": "#d75faf", + "ef170": "#d75fd7", "ef171": "#d75fff", "ef172": "#d78700", "ef173": "#d7875f", "ef174": "#d78787", "ef175": "#d787af", "ef176": "#d787d7", "ef177": "#d787ff", "ef178": "#d7af00", + "ef179": "#d7af5f", "ef180": "#d7af87", "ef181": "#d7afaf", "ef182": "#d7afd7", "ef183": "#d7afff", "ef184": "#d7d700", "ef185": "#d7d75f", "ef186": "#d7d787", "ef187": "#d7d7af", + "ef188": "#d7d7d7", "ef189": "#d7d7ff", "ef190": "#d7ff00", "ef191": "#d7ff5f", "ef192": "#d7ff87", "ef193": "#d7ffaf", "ef194": "#d7ffd7", "ef195": "#d7ffff", "ef196": "#ff0000", + "ef197": "#ff005f", "ef198": "#ff0087", "ef199": "#ff00af", "ef200": "#ff00d7", "ef201": "#ff00ff", "ef202": "#ff5f00", "ef203": "#ff5f5f", "ef204": "#ff5f87", "ef205": "#ff5faf", + "ef206": "#ff5fd7", "ef207": "#ff5fff", "ef208": "#ff8700", "ef209": "#ff875f", "ef210": "#ff8787", "ef211": "#ff87af", "ef212": "#ff87d7", "ef213": "#ff87ff", "ef214": "#ffaf00", + "ef215": "#ffaf5f", "ef216": "#ffaf87", "ef217": "#ffafaf", "ef218": "#ffafd7", "ef219": "#ffafff", "ef220": "#ffd700", "ef221": "#ffd75f", "ef222": "#ffd787", "ef223": "#ffd7af", + "ef224": "#ffd7d7", "ef225": "#ffd7ff", "ef226": "#ffff00", "ef227": "#ffff5f", "ef228": "#ffff87", "ef229": "#ffffaf", "ef230": "#ffffd7", "ef231": "#ffffff", "ef232": "#080808", + "ef233": "#121212", "ef234": "#1c1c1c", "ef235": "#262626", "ef236": "#303030", "ef237": "#3a3a3a", "ef238": "#444444", "ef239": "#4e4e4e", "ef240": "#585858", "ef241": "#626262", + "ef242": "#6c6c6c", "ef243": "#767676", "ef244": "#808080", "ef245": "#8a8a8a", "ef246": "#949494", "ef247": "#9e9e9e", "ef248": "#a8a8a8", "ef249": "#b2b2b2", "ef250": "#bcbcbc", + "ef251": "#c6c6c6", "ef252": "#d0d0d0", "ef253": "#dadada", "ef254": "#e4e4e4", "ef255": "#eeeeee", } + +set2rgb = { 52: '#470000', 94: '#472100', 100: '#474700', 58: '#324700', 22: '#004700', 29: '#00472C', 23: '#004747', 24: '#002747', 17: '#000047', 54: '#2E0047', 53: '#470047', 89: '#47002A', + 88: '#740000', 130: '#743A00', 142: '#747400', 64: '#517400', 28: '#007400', 35: '#007449', 30: '#007474', 25: '#004074', 18: '#000074', 91: '#4B0074', 90: '#740074', 125: '#740045', + 124: '#B50000', 166: '#B56300', 184: '#B5B500', 106: '#7DB500', 34: '#00B500', 49: '#00B571', 37: '#00B5B5', 33: '#0063B5', 19: '#0000B5', 129: '#7500B5', 127: '#B500B5', 161: '#B5006B', + 196: '#FF0000', 208: '#FF8C00', 226: '#FFFF00', 154: '#B2FF00', 46: '#00FF00', 86: '#00FFA0', 51: '#00FFFF', 75: '#008CFF', 21: '#0000FF', 171: '#A500FF', 201: '#FF00FF', 198: '#FF0098', + 203: '#FF5959', 215: '#FFB459', 227: '#FFFF71', 191: '#CFFF60', 83: '#6FFF6F', 122: '#65FFC9', 87: '#6DFFFF', 111: '#59B4FF', 63: '#5959FF', 177: '#C459FF', 207: '#FF66FF', 205: '#FF59BC', + 217: '#FF9C9C', 223: '#FFD39C', 229: '#FFFF9C', 193: '#E2FF9C', 157: '#9CFF9C', 158: '#9CFFDB', 159: '#9CFFFF', 153: '#9CD3FF', 147: '#9CD3FF', 183: '#DC9CFF', 219: '#FF9CFF', 212: '#FF94D3', + 16: '#000000', 233: '#131313', 235: '#282828', 237: '#363636', 239: '#4D4D4D', 241: '#656565', 244: '#818181', 247: '#9F9F9F', 250: '#BCBCBC', 254: '#E2E2E2', 231: '#FFFFFF', } + +SIMULATION = { 226: "#ffff00", 214: "#ffaf00", 220: "#ffd700", 208: "#ff8700", 202: "#ff5f00", 196: "#ff0000", 190: "#d7ff00", 154: "#afff00", + 118: "#87ff00", 82: "#5fff00", 51: "#00ffff", 50: "#00ffd7", 49: "#00ffaf", 48: "#00ff87", 47: "#00ff5f", 46: "#00ff00", } + +def invert_dict(d): + return {v: k for k, v in d.items()} + +def hex2gravity(h): + r,g,b=int(h[1:3],16),int(h[3:5],16),int(h[5:7],16) + o=list(set2rgb.values()); o.sort() + _R=[]; _G=[]; _B=[]; + + for _ in o: + R,G,B=(''.join([x for x in _[1:][:2]]).zfill(2)),(''.join([x for x in _[1:][2:4]]).zfill(2)),(''.join([x for x in _[1:][4:6]]).zfill(2)) + _R.append(int(R,16)); _G.append(int(G,16)); _B.append(int(B,16)); + + _r = [] + for _ in _R: + if r < _: + rsub = _ - r + else: + rsub = r - _ + _r.append(rsub) + + _g = [] + for _ in _G: + if g < _: + gsub = _ - g + else: + gsub = g - _ + _g.append(gsub) + + _b = [] + for _ in _B: + if b < _: + bsub = _ - b + else: + bsub = b - _ + _b.append(bsub) + rgb = [] + for _ in range(len(_r)): + rgb.append(_r[_]+_g[_]+_b[_]) + nearest_color_minus = min(rgb) + nearest_color_index = [i for i, x in enumerate(rgb) if x == nearest_color_minus] + nearest_color = o[nearest_color_index[0]] + print(f"\t\t\t\t! hex2gravity: nearest color determined: {nearest_color} from set2rgb") + +if __name__=="__main__": + + rn = 0 + while rn == 0: + rn = randint(0,len(SIMULATION)) + if rn > 0: + ri = [] + try: + for _ in range(rn): + ri.append( list(SIMULATION.keys())[randint(0,rn)] ) + except Exception as e: + print(f'error: {e}') + ipdb.set_trace() + print(f"\n! randomized simulation:\n\t\n\t! selected: {rn} values of {ri}\n") + for _ in ri: + print(f"\t\t! {str(_).zfill(3)} as {rgb2set['ef{}'.format(_)]}") + color=-1 + try: + color=set2rgb[_] + print(f"\t\t\t! exact color match: {color} to {_}") + try: + print(f"\t\t\t? final color: {rgb2irc[_]} int or {int(rgb2irc[_],16)} hex\n\t\t\t? translated as irc color code 0x03{int(rgb2irc[_],16)}") + except Exception as e: + ipdb.set_trace() + print(f"error: {e}") + except Exception as e: + print(f"\t\t\t! not an exact color match: {color} to {e}\n\t\t\t? nearest color matching required") + print(f"\t\t\t\t? hex2gravity: find {rgb2set['ef{}'.format(_)]} nearest in set2rgb") + farthest_color_hex = rgb2set['ef{}'.format(_)] + result = hex2gravity(farthest_color_hex) + print(":) - clean exit") diff --git a/dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py b/dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py new file mode 100644 index 0000000..d6152f3 --- /dev/null +++ b/dr1ppl3.s1x_3.of.4_g1mp1ng.1nt3rf4c3.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +from irc3.plugins.command import command +from irc3.plugins.cron import cron +import irc3 + +import sys +import re +from urllib.request import Request, urlopen +from urllib.error import URLError, HTTPError + +USER_AGENT_CURL="curl/7.29.0" +STATUS_BAD_CODE=":( - error code: {}" +STATUS_BAD_REASON=":( - failed reason: {}" +STATUS_OK=":)" + +@irc3.plugin +class Plugin: + + def __init__(self, bot): + self.bot = bot + + def ratesex_request(self,commands): + url = f"https://rate.sx/{commands}" + r = Request(url,data=None,headers={ 'User-Agent': USER_AGENT_CURL }) + try: + response = urlopen(r,timeout=10).read().decode('utf-8') + except HTTPError as e: + return STATUS_BAD_CODE.format(e.code) + except URLError as e: + return STATUS_BAD_REASON.format(e.reason) + else: + print(response) + return STATUS_OK + response + + def escape_ansi(self,line): + ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]') + return ansi_escape.sub('', str(line)) + + + @command(permission='view') + def ratesex(self, mask, target, args): + """ratesex - help/commands: visit 'https://rate.sx/:help' or try '?ratesex :help', to check exchange rates for top 10 ^cripdoeocurrencies try '?ratesex top10' + %%ratesex + """ + command = args.get('') + if command.lower() == 'top10': command = '' + response=self.ratesex_request(command) + s = '' + for _ in response: + s = s + ''.join(_) + B=self.escape_ansi(s).replace('\x1b(B','') + f = open('/run/irc3/tcpdirect','w') + for _ in B: + f.write(_) + f.close() diff --git a/dr1ppl3.s1x_4.of.4_f1f0.p1p3.py b/dr1ppl3.s1x_4.of.4_f1f0.p1p3.py new file mode 100644 index 0000000..fac5938 --- /dev/null +++ b/dr1ppl3.s1x_4.of.4_f1f0.p1p3.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +import os +import irc3 +from stat import S_ISFIFO +import ipdb +__doc__ = ''' + + + +ds notes +mkdir /run/irc3 +chown $USER:$USER /run/irc3 +cat whatever > /run/irc3/channelname +#this operates like a typical fifo pipe now +#ratesex_plugin depends on this plugin to operate + + + +========================================== +:mod:`irc3.plugins.fifo` Fifo plugin +========================================== + +Allow to cat something to a channel using Unix's fifo + +.. + >>> from irc3.testing import IrcBot + >>> from irc3.testing import ini2config + >>> import shutil + >>> import os + >>> try: + ... shutil.rmtree('/tmp/run/irc3') + ... except: + ... pass + +Usage:: + + >>> config = ini2config(""" + ... [bot] + ... includes = + ... irc3.plugins.fifo + ... [irc3.plugins.fifo] + ... runpath = /tmp/run/irc3 + ... """) + >>> bot = IrcBot(**config) + +When your bot will join a channel it will create a fifo:: + + >>> bot.test(':irc3!user@host JOIN #channel') + >>> print(sorted(os.listdir('/tmp/run/irc3'))) + [':raw', 'channel'] + +You'll be able to print stuff to a channel from a shell:: + + $ cat /etc/passwd > /tmp/run/irc3/channel + +You can also send raw irc commands using the ``:raw`` file:: + + $ echo JOIN \#achannel > /tmp/run/irc3/:raw +''' + + +@irc3.plugin +class Fifo: + + BLOCK_SIZE = 1024 + MAX_BUFFER_SIZE = 800 + + def __init__(self, context): + self.context = context + self.config = self.context.config + self.send_blank_line = self.config.get('send_blank_line', True) + self.runpath = self.config.get('runpath', '/run/irc3') + if not os.path.exists(self.runpath): + os.makedirs(self.runpath) + + self.loop = self.context.loop + self.fifos = {} + self.buffers = {} + self.create_fifo(None) + + @classmethod + def read_fd(cls, fd): # pragma: no cover + # this required for python < 3.5 + # for more info see https://www.python.org/dev/peps/pep-0475/ + while True: + try: + return os.read(fd, cls.BLOCK_SIZE) + except InterruptedError: + continue + except BlockingIOError: + return b"" + + def handle_line(self, line, channel): + if not line: + return + + line = line.decode("utf8") + if not self.send_blank_line and not line.strip(): + return + + if channel is None: + self.context.send_line(line) + else: + self.context.privmsg(channel, line) + + def data_received(self, data, channel): + if not data: + return + + prev = self.buffers.get(channel, b"") + lines = (prev + data).splitlines(True) + last = lines[-1] + for line in lines[:-1]: + line = line.rstrip(b'\r\n') + self.handle_line(line, channel) + + if last.endswith(b'\n'): + line = last.rstrip(b'\r\n') + self.handle_line(line, channel) + self.buffers[channel] = b"" + return + + if len(last) > self.MAX_BUFFER_SIZE: + self.handle_line(last, channel) + self.buffers[channel] = b"" + else: + self.buffers[channel] = last + + def watch_fd(self, fd, channel): + reading = True + + while reading: + data = self.read_fd(fd) + reading = len(data) == self.BLOCK_SIZE + self.data_received(data, channel) + + def create_fifo(self, channel): + if channel is None: + path = os.path.join(self.runpath, ':raw') + else: + path = os.path.join(self.runpath, channel.strip('#&+')) + try: + mode = os.stat(path).st_mode + except OSError: + pass + else: + if not S_ISFIFO(mode): + self.context.log.warn( + 'file %s created without mkfifo. remove it', + path) + os.remove(path) + if not os.path.exists(path): + os.mkfifo(path) + fd = os.open(path, os.O_RDWR | os.O_NONBLOCK) + self.loop.add_reader(fd, self.watch_fd, fd, channel) + self.context.log.debug("%s's fifo is %s %r", + channel or ':raw', path, fd) + return fd + + @irc3.event(irc3.rfc.JOIN) + def join(self, mask=None, channel=None, **kwargs): + if mask.nick == self.context.nick: + if channel not in self.fifos: + self.fifos[channel] = self.create_fifo(channel) diff --git a/extract.py b/extract.py new file mode 100644 index 0000000..21f2ec6 --- /dev/null +++ b/extract.py @@ -0,0 +1,176 @@ +import re +import ipdb +rgb2set = { "ef0": "#000000", "ef1": "#CD0000", "ef2": "#00CD00", "ef3": "#CDCD00", "ef4": "#0000EE", "ef5": "#CD00CD", "ef6": "#00CDCD", "ef7": "#E5E5E5", + "ef8": "#7F7F7F", "ef9": "#FF0000", "ef10": "#00FF00", "ef11": "#FFFF00", "ef12": "#5C5CFF", "ef13": "#FF00FF", "ef14": "#00FFFF", "ef15": "#FFFFFF", + "eb8": "#7F7F7F", "eb9": "#FF0000", "eb10": "#00FF00", "eb11": "#FFFF00", "eb12": "#5C5CFF", "eb13": "#FF00FF", "eb14": "#00FFFF", "eb15": "#FFFFFF", "ef16": "#000000", + "ef17": "#00005f", "ef18": "#000087", "ef19": "#0000af", "ef20": "#0000d7", "ef21": "#0000ff", "ef22": "#005f00", "ef23": "#005f5f", "ef24": "#005f87", "ef25": "#005faf", + "ef26": "#005fd7", "ef27": "#005fff", "ef28": "#008700", "ef29": "#00875f", "ef30": "#008787", "ef31": "#0087af", "ef32": "#0087d7", "ef33": "#0087ff", "ef34": "#00af00", + "ef35": "#00af5f", "ef36": "#00af87", "ef37": "#00afaf", "ef38": "#00afd7", "ef39": "#00afff", "ef40": "#00d700", "ef41": "#00d75f", "ef42": "#00d787", "ef43": "#00d7af", + "ef44": "#00d7d7", "ef45": "#00d7ff", "ef46": "#00ff00", "ef47": "#00ff5f", "ef48": "#00ff87", "ef49": "#00ffaf", "ef50": "#00ffd7", "ef51": "#00ffff", "ef52": "#5f0000", + "ef53": "#5f005f", "ef54": "#5f0087", "ef55": "#5f00af", "ef56": "#5f00d7", "ef57": "#5f00ff", "ef58": "#5f5f00", "ef59": "#5f5f5f", "ef60": "#5f5f87", "ef61": "#5f5faf", + "ef62": "#5f5fd7", "ef63": "#5f5fff", "ef64": "#5f8700", "ef65": "#5f875f", "ef66": "#5f8787", "ef67": "#5f87af", "ef68": "#5f87d7", "ef69": "#5f87ff", "ef70": "#5faf00", + "ef71": "#5faf5f", "ef72": "#5faf87", "ef73": "#5fafaf", "ef74": "#5fafd7", "ef75": "#5fafff", "ef76": "#5fd700", "ef77": "#5fd75f", "ef78": "#5fd787", "ef79": "#5fd7af", + "ef80": "#5fd7d7", "ef81": "#5fd7ff", "ef82": "#5fff00", "ef83": "#5fff5f", "ef84": "#5fff87", "ef85": "#5fffaf", "ef86": "#5fffd7", "ef87": "#5fffff", "ef88": "#870000", + "ef89": "#87005f", "ef90": "#870087", "ef91": "#8700af", "ef92": "#8700d7", "ef93": "#8700ff", "ef94": "#875f00", "ef95": "#875f5f", "ef96": "#875f87", "ef97": "#875faf", + "ef98": "#875fd7", "ef99": "#875fff", "ef100": "#878700", "ef101": "#87875f", "ef102": "#878787", "ef103": "#8787af", "ef104": "#8787d7", "ef105": "#8787ff", "ef106": "#87af00", + "ef107": "#87af5f", "ef108": "#87af87", "ef109": "#87afaf", "ef110": "#87afd7", "ef111": "#87afff", "ef112": "#87d700", "ef113": "#87d75f", "ef114": "#87d787", "ef115": "#87d7af", + "ef116": "#87d7d7", "ef117": "#87d7ff", "ef118": "#87ff00", "ef119": "#87ff5f", "ef120": "#87ff87", "ef121": "#87ffaf", "ef122": "#87ffd7", "ef123": "#87ffff", "ef124": "#af0000", + "ef125": "#af005f", "ef126": "#af0087", "ef127": "#af00af", "ef128": "#af00d7", "ef129": "#af00ff", "ef130": "#af5f00", "ef131": "#af5f5f", "ef132": "#af5f87", "ef133": "#af5faf", + "ef134": "#af5fd7", "ef135": "#af5fff", "ef136": "#af8700", "ef137": "#af875f", "ef138": "#af8787", "ef139": "#af87af", "ef140": "#af87d7", "ef141": "#af87ff", "ef142": "#afaf00", + "ef143": "#afaf5f", "ef144": "#afaf87", "ef145": "#afafaf", "ef146": "#afafd7", "ef147": "#afafff", "ef148": "#afd700", "ef149": "#afd75f", "ef150": "#afd787", "ef151": "#afd7af", + "ef152": "#afd7d7", "ef153": "#afd7ff", "ef154": "#afff00", "ef155": "#afff5f", "ef156": "#afff87", "ef157": "#afffaf", "ef158": "#afffd7", "ef159": "#afffff", "ef160": "#d70000", + "ef161": "#d7005f", "ef162": "#d70087", "ef163": "#d700af", "ef164": "#d700d7", "ef165": "#d700ff", "ef166": "#d75f00", "ef167": "#d75f5f", "ef168": "#d75f87", "ef169": "#d75faf", + "ef170": "#d75fd7", "ef171": "#d75fff", "ef172": "#d78700", "ef173": "#d7875f", "ef174": "#d78787", "ef175": "#d787af", "ef176": "#d787d7", "ef177": "#d787ff", "ef178": "#d7af00", + "ef179": "#d7af5f", "ef180": "#d7af87", "ef181": "#d7afaf", "ef182": "#d7afd7", "ef183": "#d7afff", "ef184": "#d7d700", "ef185": "#d7d75f", "ef186": "#d7d787", "ef187": "#d7d7af", + "ef188": "#d7d7d7", "ef189": "#d7d7ff", "ef190": "#d7ff00", "ef191": "#d7ff5f", "ef192": "#d7ff87", "ef193": "#d7ffaf", "ef194": "#d7ffd7", "ef195": "#d7ffff", "ef196": "#ff0000", + "ef197": "#ff005f", "ef198": "#ff0087", "ef199": "#ff00af", "ef200": "#ff00d7", "ef201": "#ff00ff", "ef202": "#ff5f00", "ef203": "#ff5f5f", "ef204": "#ff5f87", "ef205": "#ff5faf", + "ef206": "#ff5fd7", "ef207": "#ff5fff", "ef208": "#ff8700", "ef209": "#ff875f", "ef210": "#ff8787", "ef211": "#ff87af", "ef212": "#ff87d7", "ef213": "#ff87ff", "ef214": "#ffaf00", + "ef215": "#ffaf5f", "ef216": "#ffaf87", "ef217": "#ffafaf", "ef218": "#ffafd7", "ef219": "#ffafff", "ef220": "#ffd700", "ef221": "#ffd75f", "ef222": "#ffd787", "ef223": "#ffd7af", + "ef224": "#ffd7d7", "ef225": "#ffd7ff", "ef226": "#ffff00", "ef227": "#ffff5f", "ef228": "#ffff87", "ef229": "#ffffaf", "ef230": "#ffffd7", "ef231": "#ffffff", "ef232": "#080808", + "ef233": "#121212", "ef234": "#1c1c1c", "ef235": "#262626", "ef236": "#303030", "ef237": "#3a3a3a", "ef238": "#444444", "ef239": "#4e4e4e", "ef240": "#585858", "ef241": "#626262", + "ef242": "#6c6c6c", "ef243": "#767676", "ef244": "#808080", "ef245": "#8a8a8a", "ef246": "#949494", "ef247": "#9e9e9e", "ef248": "#a8a8a8", "ef249": "#b2b2b2", "ef250": "#bcbcbc", + "ef251": "#c6c6c6", "ef252": "#d0d0d0", "ef253": "#dadada", "ef254": "#e4e4e4", "ef255": "#eeeeee", } + +rgb2irc = { 52: '16', 94: '17', 100: '18', 58: '19', 22: '20', 29: '21', 23: '22', 24: '23', 17: '24', 54: '25', 53: '26', 89: '27', + 88: '28', 130: '29', 142: '30', 64: '31', 28: '32', 35: '33', 30: '34', 25: '35', 18: '36', 91: '37', 90: '38', 125: '39', + 124: '40', 166: '41', 184: '42', 106: '43', 34: '44', 49: '45', 37: '46', 33: '47', 19: '48', 129: '49', 127: '50', 161: '51', + 196: '52', 208: '53', 226: '54', 154: '55', 46: '56', 86: '57', 51: '58', 75: '59', 21: '60', 171: '61', 201: '62', 198: '63', + 203: '64', 215: '65', 227: '66', 191: '67', 83: '68', 122: '69', 87: '70', 111: '71', 63: '72', 177: '73', 207: '74', 205: '75', + 217: '76', 223: '77', 229: '78', 193: '79', 157: '80', 158: '81', 159: '82', 153: '83', 147: '84', 183: '85', 219: '86', 212: '87', + 16: '88', 233: '89', 235: '90', 237: '91', 239: '92', 241: '93', 244: '94', 247: '95', 250: '96', 254: '97', 231: '98', } + +set2rgb = { 52: '#470000', 94: '#472100', 100: '#474700', 58: '#324700', 22: '#004700', 29: '#00472C', 23: '#004747', 24: '#002747', 17: '#000047', 54: '#2E0047', 53: '#470047', 89: '#47002A', + 88: '#740000', 130: '#743A00', 142: '#747400', 64: '#517400', 28: '#007400', 35: '#007449', 30: '#007474', 25: '#004074', 18: '#000074', 91: '#4B0074', 90: '#740074', 125: '#740045', + 124: '#B50000', 166: '#B56300', 184: '#B5B500', 106: '#7DB500', 34: '#00B500', 49: '#00B571', 37: '#00B5B5', 33: '#0063B5', 19: '#0000B5', 129: '#7500B5', 127: '#B500B5', 161: '#B5006B', + 196: '#FF0000', 208: '#FF8C00', 226: '#FFFF00', 154: '#B2FF00', 46: '#00FF00', 86: '#00FFA0', 51: '#00FFFF', 75: '#008CFF', 21: '#0000FF', 171: '#A500FF', 201: '#FF00FF', 198: '#FF0098', + 203: '#FF5959', 215: '#FFB459', 227: '#FFFF71', 191: '#CFFF60', 83: '#6FFF6F', 122: '#65FFC9', 87: '#6DFFFF', 111: '#59B4FF', 63: '#5959FF', 177: '#C459FF', 207: '#FF66FF', 205: '#FF59BC', + 217: '#FF9C9C', 223: '#FFD39C', 229: '#FFFF9C', 193: '#E2FF9C', 157: '#9CFF9C', 158: '#9CFFDB', 159: '#9CFFFF', 153: '#9CD3FF', 147: '#9CD3FF', 183: '#DC9CFF', 219: '#FF9CFF', 212: '#FF94D3', + 16: '#000000', 233: '#131313', 235: '#282828', 237: '#363636', 239: '#4D4D4D', 241: '#656565', 244: '#818181', 247: '#9F9F9F', 250: '#BCBCBC', 254: '#E2E2E2', 231: '#FFFFFF', } + +def parse_control(s): + px=[] + py=[] + _s=s + px=findall(_s,'\x1b') + for i,_ in enumerate(px): + print(f'{i}') + py.append( _s.find('m',_)+1 ) + return px,py + +def findall(s,w): + return [i for i in range(len(s)) if s.startswith(w, i)] + +def escape_ansi(line): + ansi_escape = re.compile(r'(\x9B|\x1B\[)[0-?]*[ -/]*[@-~]') + return ansi_escape.sub('', str(line)) + +def invert_dict(d): + return {v: k for k, v in d.items()} + + +def hex2gravity(h): + r,g,b=int(h[1:3],16),int(h[3:5],16),int(h[5:7],16) + o=list(set2rgb.values()); o.sort() + _R=[]; _G=[]; _B=[]; + + for _ in o: + R,G,B=(''.join([x for x in _[1:][:2]]).zfill(2)),(''.join([x for x in _[1:][2:4]]).zfill(2)),(''.join([x for x in _[1:][4:6]]).zfill(2)) + _R.append(int(R,16)); _G.append(int(G,16)); _B.append(int(B,16)); + + _r = [] + for _ in _R: + if r < _: + rsub = _ - r + else: + rsub = r - _ + _r.append(rsub) + + _g = [] + for _ in _G: + if g < _: + gsub = _ - g + else: + gsub = g - _ + _g.append(gsub) + + _b = [] + for _ in _B: + if b < _: + bsub = _ - b + else: + bsub = b - _ + _b.append(bsub) + rgb = [] + for _ in range(len(_r)): + rgb.append(_r[_]+_g[_]+_b[_]) + nearest_color_minus = min(rgb) + nearest_color_index = [i for i, x in enumerate(rgb) if x == nearest_color_minus] + nearest_color = o[nearest_color_index[0]] + print(f"\t\t\t\t! hex2gravity: nearest color determined: {nearest_color} from set2rgb index {nearest_color} translated as irc color code 0x03{rgb2irc[invert_dict(set2rgb)[nearest_color]]}") + return str(f"\x03{rgb2irc[invert_dict(set2rgb)[nearest_color]]}") + +def color_line(s,ss,t): + _reset = "\x1b[0m" #0f + _bright = "\x1b[1m" + _dim = "\x1b[2m" + _underscore = "\x1b[4m" + _blink = "\x1b[5m" + _reverse = "\x1b[7m" + _hidden = "\x1b[8m" + + _black = "\x1b[30m" #01 + _red = "\x1b[31m" #04 + _green = "\x1b[32m" #03 + _yellow = "\x1b[33m" #08 + _blue = "\x1b[34m" #02 + _magenta = "\x1b[35m" #13 + _cyan = "\x1b[36m" #11 + _white = "\x1b[37m" #00 + + _BGblack = "\x1b[40m" #01 + _BGred = "\x1b[41m" #04 + _BGgreen = "\x1b[42m" #03 + _BGyellow = "\x1b[43m" #08 + _BGblue = "\x1b[44m" #02 + _BGmagenta = "\x1b[45m" #13 + _BGcyan = "\x1b[46m" #11 + _BGwhite = "\x1b[47m" #00 + + codes=["\x1b[0m","\x1b[30m","\x1b[31m","\x1b[32m","\x1b[33m","\x1b[34m","\x1b[35m","\x1b[36m","\x1b[37m","\x1b[40m","\x1b[41m","\x1b[42m","\x1b[43m","\x1b[44m","\x1b[45m","\x1b[46m","\x1b[47m","\x1b(B","\x1b[m","\x1b[2m"] + colors=["\x0f","\x0301","\x0304","\x0303","\x0308","\x03002","\x0313","\x0311","\x0300","\x03,01","\x03,04","\x03,03","\x03,08","\x03,02","\x03,13","\x03,11","\x03,00","","\x0f",""] #f.write('\x0301,00decoded\n') + _s=s + p=[] + for _ in range(len(t[0])): + print(f"here {_}") + r=findall(s[t[0][_]:t[1][_]],'\x1b') + for __ in range(len(r)): + if not __ == len(r)-1: + p.append(s[t[0][_]:t[1][_]][r[__]:r[__+1]]) + else: + check = s[t[0][_]:t[1][_]][r[__]:] + if check.find('mm') == -1: + p.append(check) + else: + p.append(check[:-1]) + for __ in p: + _s = _s.replace(__,"{}") + c=[] + for _ in p: + for i,__ in enumerate(codes): + if _ == __: + c.append(colors[i]) + if _.find('\x1b[38;5;') != -1: + gravity = _.replace('\x1b[38;5;','')[:-1] + farthest_color_hex = rgb2set['ef{}'.format(gravity)] + result = hex2gravity(farthest_color_hex) + r=findall(_s,'{}') + for _ in range(len(r)): + _s=_s.replace('{}',c[_],_+1) + return _s + +print('color testing tools') +r1='\x1b[47m\x1b[30m▶ Monero (XMR) \x1b[0m\x1b[37m▶\x1b[0m Thu 08 +1d \x1b[31m-3.57%\x1b[0m' +r1='\x1b[2m│\x1b[0m 1 \x1b[2m│\x1b[0m \x1b[36mBTC\x1b[0m \x1b[2m│\x1b[0m \x1b[36m32830.2\x1b[0m \x1b[2m│\x1b[0m \x1b[32m0.95%\x1b[0m \x1b[2m│\x1b[0m \x1b[31m-0.04%\x1b[0m \x1b[2m│\x1b[0m 615.622B \x1b[2m│\x1b[0m \x1b[31m▁\x1b[0m\x1b[31m▂\x1b[0m\x1b[32m▃\x1b[0m\x1b[31m▂\x1b[0m\x1b[32m▂\x1b[0m\x1b[31m▂\x1b[0m\x1b[31m▇\x1b[0m\x1b[31m▃\x1b[0m\x1b[32m▇\x1b[0m\x1b[32m▂\x1b[0m\x1b[32m▅\x1b[0m\x1b[31m▃\x1b[0m \x1b[2m│\x1b[0m' +r2=escape_ansi(r1).replace('\x1b(B','') +t=parse_control(r1) +d=color_line(r1,r2,t)