import settings import asyncio import json from datetime import datetime from uuid import uuid4 from telethon import TelegramClient, events from aiohttp import web bot = TelegramClient('data/bot', settings.API_ID, settings.API_HASH).start(bot_token=settings.API_TOKEN) TANNER = 79316791 messages = {} @bot.on(events.NewMessage(incoming=True)) async def new_message(event): text = event.raw_text sender = event.sender_id print(sender, text) if sender != TANNER: return if not text.startswith('/allow_'): return mid = text.replace('/allow_', '') try: data = messages[mid] except KeyError: await event.reply('Message ID not found. Did the bot restart?') return entry = '--------------------------\n\n{} - {}'.format(data['date'], data['name']) website = data['website'] if website: if not website.startswith('http://') and not website.startswith('https://'): website = 'http://' + website entry += ' ({0})'.format(website) entry += '\n\n{}\n\n'.format(data['message']) with open('data/guestbook.html', 'a') as f: f.write(entry) await event.reply('Entry added to t0.vc/g') print('Added', data) async def submit(request): data = dict(await request.post()) data['date'] = str(datetime.today().date()) mid = str(uuid4()).split('-')[0] print(mid, data) try: name = data['name'] website = data.get('website', '') message = data['message'] except KeyError: raise web.HTTPBadRequest(reason='You are missing something.') if len(name) > 50: raise web.HTTPBadRequest(reason='Name is too long.') if len(website) > 100: raise web.HTTPBadRequest(reason='Website is too long.') if len(message) > 1000: raise web.HTTPBadRequest(reason='Message is too long.') report = 'Name: {}\n\nWebsite: {}\n\nMessage: {}\n\n/allow_{}' await bot.send_message(TANNER, message=report.format(name, website, message, mid)) messages[mid] = data with open('data/messages.log', 'a') as f: f.write(json.dumps(data)+'\n') return web.Response(text='Thanks! Your message is pending approval.') if __name__ == '__main__': bot.start() app = web.Application() app.router.add_post('/', submit) web.run_app(app, port=8123)