49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from telethon import TelegramClient
|
|
import asyncio
|
|
import json
|
|
|
|
from utils import parse_menu_message, InvalidMenuMessageError
|
|
import config
|
|
|
|
|
|
async def get_message_history(chat_name, limit=None):
|
|
async with TelegramClient(config.session_name, config.api_id, config.api_hash) as client:
|
|
chat_info = await client.get_entity(chat_name)
|
|
|
|
messages = await client.get_messages(entity=chat_info, limit=limit)
|
|
|
|
return messages
|
|
|
|
|
|
def parse_message_history(chat_name, limit=None):
|
|
messages = asyncio.run(get_message_history(
|
|
chat_name=chat_name, limit=limit))
|
|
|
|
menus = {}
|
|
for msg in messages:
|
|
# Ignore messages without text conent and info messages (these usually include ! symbol)
|
|
if msg.message is None or "!" in msg.message:
|
|
continue
|
|
|
|
try:
|
|
courses = parse_menu_message(msg.message)
|
|
except InvalidMenuMessageError as e:
|
|
print(e)
|
|
continue
|
|
menus[msg.date.strftime("%d-%m-%Y")] = {"courses": courses,
|
|
"message": msg.message}
|
|
|
|
return menus
|
|
|
|
|
|
if __name__ == "__main__":
|
|
menus = parse_message_history(config.channel_name)
|
|
|
|
# We manually include menus in photos from July 2022
|
|
with open("menu_photos_history.json", 'r') as file:
|
|
data = json.load(file)
|
|
menus.update(data)
|
|
|
|
with open(config.menu_history_file_path, "w", encoding='utf-8') as f:
|
|
json.dump(menus, f, ensure_ascii=False, indent=4)
|