|
#!/usr/bin/env python3 |
|
|
|
import sys |
|
import os |
|
import re |
|
import tempfile |
|
from subprocess import run |
|
import random |
|
import string |
|
|
|
class FilenameTooLongError(OSError): |
|
pass |
|
|
|
def rand_filename(): |
|
def rand_choice(): |
|
return random.choice(string.ascii_letters + string.digits) |
|
return "." + "".join([rand_choice() for _ in range(3)]) |
|
|
|
room = list() |
|
memes = list() |
|
|
|
if sys.stdin.isatty(): |
|
with open(os.path.abspath(sys.argv[1]), "r") as boi: |
|
memes = [l for l in boi.readlines()] |
|
try: |
|
if sys.argv[2]: |
|
room.append("-r") |
|
room.append(sys.argv[2]) |
|
except IndexError: |
|
pass |
|
else: |
|
memes = [l for l in sys.stdin.readlines()] |
|
try: |
|
if sys.argv[1]: |
|
room.append("-r") |
|
room.append(sys.argv[1]) |
|
except IndexError: |
|
pass |
|
|
|
if len(memes[0].encode("utf-8")) > 251: # 255 - 4 bytes for additional filename later |
|
raise FilenameTooLongError("Ey boi, max length of lelnix filename is 255 bytes, " |
|
"make your text shorter if you want your meme reign supreme.") |
|
|
|
with tempfile.TemporaryDirectory() as d: |
|
box = re.compile("[\u2500-\u257F]", re.I | re.M) |
|
for i, l in enumerate(memes): |
|
memes[i] = box.sub("░", l).strip().replace(" ", "░") |
|
#remove double lines and trailing line at the bottom |
|
for i, l in enumerate(memes): |
|
if (l == len(l) * l[0]) and (memes[i+1] == len(memes[i+1]) * memes[i+1][0]): |
|
memes.pop(i) |
|
if memes[-1] == len(memes[-1]) * memes[-1][0]: |
|
memes.pop() |
|
#add random filename if not all filenames are unique |
|
memes_no_lines = [m for m in memes if (m != len(m) * m[0])] |
|
if len(memes_no_lines) > len(set(memes_no_lines)): |
|
for i, m in enumerate(memes): |
|
memes[i] = m + rand_filename() |
|
|
|
meme_files = list() |
|
for i in memes[::-1]: |
|
path = d + "/" + i |
|
with open(path, "w") as nuthing: |
|
pass |
|
meme_files.append(path) |
|
run(["volaupload.sh", *room, *meme_files]) |
Doesn't work as of now. Seems like lain disallows box-drawing characters in filenames now.