Complete guest book

This commit is contained in:
Tanner Collin 2021-08-20 21:41:04 +00:00
parent 8d71f71a1d
commit fef9f0f1c2
2 changed files with 88 additions and 3 deletions

23
guestbook.html.blank Normal file
View File

@ -0,0 +1,23 @@
<meta charset=UTF-8><link rel=icon href=data:,><pre>
Tanner Collin
Guest Book
==========
If you visited my website, please sign my guestbook!
<form action="g/submit" method="POST" accept-charset="UTF-8">
Your name:
<input name="name">
Your website (optional):
<input name="website">
Your message:
<textarea name="message" cols="60" rows="8"></textarea>
<button type="submit">Submit</button>
</form>
Messages
========

68
main.py
View File

@ -1,19 +1,81 @@
import settings import settings
import asyncio import asyncio
import json
from datetime import datetime
from uuid import uuid4
from telethon import TelegramClient, events from telethon import TelegramClient, events
from aiohttp import web from aiohttp import web
bot = TelegramClient('data/bot', settings.API_ID, settings.API_HASH).start(bot_token=settings.API_TOKEN) 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)) @bot.on(events.NewMessage(incoming=True))
async def new_message(event): async def new_message(event):
text = event.raw_text text = event.raw_text
print(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 += ' (<a href="{0}" target="_blank" rel="noreferrer noopener">{0}</a>)'.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): async def submit(request):
data = await request.post() data = dict(await request.post())
print(data) 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__': if __name__ == '__main__':
bot.start() bot.start()