from telethon import TelegramClient import asyncio import json from utils import parse_menu_message, InvalidMenuMessageError import config async def get_message_history(chat_id, limit=None): async with TelegramClient(config.session_name, config.api_id, config.api_hash) as client: chat_info = await client.get_entity(chat_id) messages = await client.get_messages(entity=chat_info, limit=limit) return messages def parse_message_history(chat_id, limit=None): messages = asyncio.run(get_message_history( chat_id=chat_id, 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_id) # 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)