|
- import os
- import logging
- logging.basicConfig(
- format='[%(asctime)s] %(levelname)s %(module)s/%(funcName)s - %(message)s',
- level=logging.DEBUG if os.environ.get('DEBUG') else logging.INFO)
-
- import settings
- import asyncio
- import json
- import requests
- 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 = {}
-
- def controller_message(message):
- payload = dict(misc=message)
- r = requests.post('https://tbot.tannercollin.com/message', data=payload, timeout=10)
- if r.status_code == 200:
- return True
- else:
- logging.exception('Unable to communicate with controller! Message: ' + message)
- return False
-
- @bot.on(events.NewMessage(incoming=True))
- async def new_message(event):
- text = event.raw_text
- sender = event.sender_id
- logging.info('{} {}'.format(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:
- prefixes = ['http://', 'https://', 'gemini://', 'gopher://']
- for prefix in prefixes:
- if website.startswith(prefix):
- break
- else: # for loop
- website = 'http://' + website
-
- entry += ' (<a href="{0}" target="_blank" rel="noreferrer noopener">{0}</a>)'.format(website)
-
- entry += '\n\n{}\n\n'.format(data['message'])
-
- with open('data/g/index.html', 'a') as f:
- f.write(entry)
-
- await event.reply('Entry added to t0.vc/g')
- logging.info('Added: {}'.format(data))
-
-
- async def submit(request):
- data = dict(await request.post())
- data['date'] = str(datetime.today().date())
- mid = str(uuid4()).split('-')[0]
- logging.info('{} {}'.format(mid, data))
-
- try:
- name = data['name']
- website = data.get('website', '')
- message = data['message']
- except KeyError:
- raise web.HTTPBadRequest(reason='You are missing something.')
-
- if not len(name) or not len(message):
- 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.')
-
- if 'sex' not in message and 'porn' not in message:
- report = 'Name: {}\n\nWebsite: {}\n\nMessage: {}\n\n/allow_{}'
- try:
- await bot.send_message(TANNER, message=report.format(name, website, message, mid))
- except:
- logging.error('Problem sending bot message.')
- controller_message('t0sig: problem sending bot message!')
- exit()
- 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)
|