diff --git a/.gitignore b/.gitignore index 9d669ae..7792499 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ config.py Temec.session +Temec.session-journal __pycache__/ diff --git a/bot.py b/bot.py index e6b4349..b2e14a8 100644 --- a/bot.py +++ b/bot.py @@ -1,10 +1,41 @@ from telethon import TelegramClient, events from matrix_client.client import MatrixClient import config +import os +import magic +import logging + +logging.basicConfig(level=logging.ERROR) -async def send_to_matrix(event, room): - room.send_text(event.raw_text) +def media_uploader(path, matrix_bot): + mime = magic.from_file(path, mime=True) + with open(path, 'rb') as f: + mxc = matrix_bot.upload(f.read(), mime) + return mxc, mime.split('/')[0] + + +async def send_to_matrix(event, room, matrix_bot): + media = await event.download_media() + if media is not None: + paths = media.split("\n") + mxcs = list(map( + lambda x: media_uploader(x, matrix_bot), + paths + )) + for (mxc, mime), path in zip(mxcs, paths): + if mime == "image": + room.send_image(mxc, path) + elif mime == "audio": + room.send_audio(mxc, path) + elif mime == "video": + room.send_video(mxc, path) + else: + room.send_file(mxc, path) + os.remove(path) + + if event.raw_text != "": + room.send_text(event.raw_text) matrix_bot = MatrixClient(config.matrix_creds['server']) @@ -16,8 +47,10 @@ client = TelegramClient('Temec', config.api_id, config.api_hash).start() rooms = matrix_bot.get_rooms() for chan_id, room_id in config.mappings: - client.add_event_handler(lambda x: send_to_matrix(x, rooms[room_id]), - events.NewMessage(chats=[chan_id])) - + client.add_event_handler( + lambda x: send_to_matrix(x, rooms[room_id], matrix_bot), + events.NewMessage(chats=[chan_id]) + ) +print("Started listening") client.run_until_disconnected()