diff --git a/modules/dot_t2o.py b/modules/dot_t2o.py new file mode 100644 index 0000000..1e69dbf --- /dev/null +++ b/modules/dot_t2o.py @@ -0,0 +1,62 @@ +""" +:project: telegram-onedrive +:author: L-ING +:copyright: (C) 2024 L-ING +:license: MIT, see LICENSE for more details. +""" + +from modules.client import tg_client +from modules.utils import delete_message + +KEYS = ["link", "url"] + + +async def parse_t2o_to_dict(content): + result = {} + for key in KEYS: + result[key] = [] + current_key = "" + + for line in content.splitlines(): + line.strip() + + if (key := line.lstrip("[").rstrip("]")) in KEYS: + current_key = key + elif line and current_key == "link": + line = line.split() + if len(line) == 1: + result[current_key].append({"content": line[0], "range": 1}) + elif len(line) == 2: + result[current_key].append({"content": line[0], "range": int(line[1])}) + elif line and current_key == "url": + result[current_key].append(line) + + return result + + +async def parse_t2o(event, message): + content = (await message.download_media(file=bytes)).decode() + t2o_dict = await parse_t2o_to_dict(content) + print(t2o_dict) + + for key in KEYS: + if key == "link": + for link in t2o_dict[key]: + if link["range"] == 1: + await tg_client.send_message( + event.chat_id, + message=link["content"], + ) + elif link["range"] > 1: + await tg_client.send_message( + event.chat_id, + message="/links %s %d" % (link["content"], link["range"]), + ) + elif key == "url": + for url in t2o_dict[key]: + await tg_client.send_message( + event.chat_id, + message=f"/url {url}", + ) + + await delete_message(event) diff --git a/modules/handlers/transfer.py b/modules/handlers/transfer.py index 8c16c6f..da6d45f 100644 --- a/modules/handlers/transfer.py +++ b/modules/handlers/transfer.py @@ -21,6 +21,7 @@ from modules.log import logger from modules.transfer import multi_parts_uploader from modules.onedrive.utils import preprocess_tg_file_name, use_id_ext_name +from modules.dot_t2o import parse_t2o @tg_bot.on(events.NewMessage(incoming=True, from_users=tg_user_name)) @@ -37,15 +38,19 @@ async def transfer_handler(event): try: if "document" in event.media.to_dict(): name = preprocess_tg_file_name(event) - status_message = await Status_Message.create(event) - callback = Callback(event, status_message) - response_dict = await multi_parts_uploader( - message.media.document, name, progress_callback=callback - ) - await status_message.finish( - path=os.path.join(last_remote_root_path, response_dict["name"]), - size=event.file.size, - ) + + if not name.endswith(".t2o"): + status_message = await Status_Message.create(event) + callback = Callback(event, status_message) + response_dict = await multi_parts_uploader( + message.media.document, name, progress_callback=callback + ) + await status_message.finish( + path=os.path.join(last_remote_root_path, response_dict["name"]), + size=event.file.size, + ) + else: + await parse_t2o(event, message) elif "photo" in event.media.to_dict(): name = use_id_ext_name(event) status_message = await Status_Message.create(event)