From 53df51c5d5c649823066129f88f53ee97deebd0f Mon Sep 17 00:00:00 2001 From: lifegpc Date: Fri, 10 Dec 2021 22:42:20 +0800 Subject: [PATCH] add tg_delete_all_my_msgs --- .gitignore | 1 + convert_lrc.py | 150 ++++++++++++++++++++++++++++++++++++++ gen_dlsite.py | 11 ++- libass_test.py | 83 +++++++++++++++++++++ pack-prog.py | 152 +++++++++++++++++++++++++++++++++++++++ test_chardet.py | 59 +++++++++++++++ tg_delete_all_my_msgs.py | 65 +++++++++++++++++ 7 files changed, 515 insertions(+), 6 deletions(-) create mode 100644 convert_lrc.py create mode 100644 libass_test.py create mode 100644 pack-prog.py create mode 100644 test_chardet.py create mode 100644 tg_delete_all_my_msgs.py diff --git a/.gitignore b/.gitignore index f95020a..c9f213e 100644 --- a/.gitignore +++ b/.gitignore @@ -132,3 +132,4 @@ dmypy.json *.txt *.xls *.json +*.pyi diff --git a/convert_lrc.py b/convert_lrc.py new file mode 100644 index 0000000..9f3dc62 --- /dev/null +++ b/convert_lrc.py @@ -0,0 +1,150 @@ +from getopt import gnu_getopt as getopt, GetoptError +from os.path import basename, dirname, join, splitext +from re import compile, search +from sys import argv, exit +from typing import List, Optional +try: + from _rssbotlib import AVDict, version, VideoInfo + have_rssbotlib = True +except ImportError: + have_rssbotlib = False + + +RSSBOTLIB_NOTFOUND = '''rssbotlib not found. +The source code is available at https://github.com/lifegpc/ffmpeg-study/tree/master/rssbotlib''' # noqa: E501 +DUR_REG = compile(r'^(?P[\+-])?(((?P\d+):)?((?P\d+):))?(?P\d+)(\.(?P\d+))?$') # noqa: E501 + + +def prase_duration(s: str) -> float: + r = search(DUR_REG, s) + if r is None: + raise ValueError(f'Can not parse duration "{s}"') + rd = r.groupdict() + t = int(rd['sec']) + if rd['ms']: + t += int(rd['ms']) / (10 ** len(rd['ms'])) + if rd['min']: + t += int(rd['min']) * 60 + if rd['h']: + t += int(rd['h']) * 3600 + if rd['sign'] == '-': + t = -t + return t + + +def generate_good_filename(meta: AVDict) -> Optional[str]: + m = meta.to_dict() + if 'title' in m and 'artist' in m: + return f"{m['artist']} - {m['title']}.lrc" + elif 'title' in m: + return f"{m['title']}.lrc" + + +class Cml: + def __init__(self, arg: List[str]) -> None: + self.output = None + self.file = None + self.verbose = False + self.duration = None + self.dir = None + if len(arg) == 0: + self.print_help() + exit(0) + try: + r = getopt(arg, '-hVvo:f:t:d:', + ['help', 'version', 'verbose', 'output=', 'file=', + 'duration=', 'dir=']) + for i in r[0]: + if i[0] == '-h' or i[0] == '--help': + self.print_help() + exit(0) + elif i[0] == '-V' or i[0] == '--version': + self.print_version() + exit(0) + elif i[0] == '-v' or i[0] == '--verbose': + self.verbose = True + elif i[0] == '-o' or i[0] == '--output': + self.output = i[1] + elif i[0] == '-f' or i[0] == '--file': + self.file = i[1] + elif i[0] == '-t' or i[0] == '--duration': + self.duration = prase_duration(i[1]) + elif i[0] == '-d' or i[0] == '--dir': + self.dir = i[1] + if len(r[1]) == 0: + raise GetoptError('Input lyric file is needed.') + if len(r[1]) > 1: + raise GetoptError('Too much input lyric file.') + self.input = r[1][0] + except GetoptError as e: + print(e.msg) + exit(1) + + def print_help(self): + print('''convert_lrc.py [options] +Convert translated lryics. + +Options: + -h, --help Print this help message. + -V, --version Print version. + -v, --verbose Enable verbose logging. + -o, --output Specify output path. + -f, --file Specify music file, will read duration and other + information from file. (rssbotlib is needed.) + -t, --duration