From e5b94b30c8c6c6a9c1d65e508978ea7508a1e1e7 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Tue, 2 Mar 2021 00:29:21 +0000 Subject: [PATCH] Finish initial prototype --- teledynmap.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 teledynmap.py diff --git a/teledynmap.py b/teledynmap.py new file mode 100644 index 0000000..25da437 --- /dev/null +++ b/teledynmap.py @@ -0,0 +1,56 @@ +import aiohttp +import asyncio +import logging +import re +import settings +from telethon import TelegramClient, events + +bot = TelegramClient('bot', settings.API_ID, settings.API_HASH).start(bot_token=settings.API_TOKEN) +web = None +api = lambda route: settings.DYNMAP_ADDRESS + route +logging.basicConfig(level=logging.INFO) + +@bot.on(events.NewMessage(incoming=True)) +async def new_message(event): + text = event.raw_text + sender = await event.get_sender() + + if event.chat.id != settings.CHAT_ID: + logging.info('Wrong chat ID') + return + + if not text: + logging.info('No text found') + return + + name = re.sub(r'\W+', '', sender.first_name) + '(TG)' + + logging.info('[SEND] {}: {}'.format(name, text)) + + data = dict(name=name, message=text) + await web.post(api('/up/sendmessage'), json=data) + +async def main(): + global web + web = aiohttp.ClientSession() + last_time = 0 + last_msg = '' + + while True: + async with web.get(api('/up/world/world/' + str(last_time))) as res: + j = await res.json(content_type='text/plain;charset=utf-8') + last_time = j['timestamp'] + for update in j['updates']: + if update['type'] != 'chat': continue + if update['playerName'].endswith('(TG)'): continue + message = '<{}> {}'.format(update['playerName'], update['message']) + if message == last_msg: continue + + logging.info('[RECV] ' + message) + await bot.send_message(settings.CHAT_ID, message) + last_msg = message + + await asyncio.sleep(1) + +with bot: + bot.loop.run_until_complete(main())