mirror of
https://github.com/aljazceru/telegram-chat-history-exporter.git
synced 2025-12-17 06:04:24 +01:00
export chat history first commit
This commit is contained in:
58
chat-history-export.py
Normal file
58
chat-history-export.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import os
|
||||
import json
|
||||
import datetime
|
||||
from telethon import TelegramClient, events, sync
|
||||
from settings import *
|
||||
import asyncio
|
||||
|
||||
api_id = API_ID
|
||||
api_hash = API_HASH
|
||||
phone_number = PHONE_NUMBER
|
||||
client = TelegramClient('session_name', api_id, api_hash)
|
||||
|
||||
import base64
|
||||
|
||||
|
||||
def serialize(obj):
|
||||
"""A custom serializer for non-serializable objects."""
|
||||
if isinstance(obj, datetime.datetime):
|
||||
return obj.isoformat() # Convert datetime objects to ISO format string
|
||||
elif isinstance(obj, bytes):
|
||||
return base64.b64encode(obj).decode('utf-8') # Convert bytes to base64 string
|
||||
raise TypeError(f'Object of type {obj.__class__.__name__} is not JSON serializable')
|
||||
|
||||
async def dump_chat_history(chat_id):
|
||||
chat = await client.get_entity(chat_id)
|
||||
chat_title = ''.join(e for e in chat.title if e.isalnum())
|
||||
|
||||
async for message in client.iter_messages(chat, reverse=True):
|
||||
date_str = message.date.strftime('%Y-%m-%d')
|
||||
directory = f'./{chat_title}/{date_str}'
|
||||
os.makedirs(directory, exist_ok=True)
|
||||
file_path = f'{directory}/messages.json'
|
||||
|
||||
with open(file_path, 'a') as file:
|
||||
message_dict = message.to_dict()
|
||||
# Serialize the message dict with the custom serialize function
|
||||
json.dump(message_dict, file, default=serialize)
|
||||
file.write('\n')
|
||||
|
||||
async def main():
|
||||
await client.start()
|
||||
async for dialog in client.iter_dialogs():
|
||||
if dialog.is_group or dialog.is_channel:
|
||||
await dump_chat_history(dialog.id)
|
||||
await client.stop()
|
||||
|
||||
if __name__ == '__main__':
|
||||
asyncio.run(main())
|
||||
|
||||
|
||||
async def main():
|
||||
# Fetching all the chats
|
||||
async for dialog in client.iter_dialogs():
|
||||
if dialog.is_group or dialog.is_channel:
|
||||
await dump_chat_history(dialog.id)
|
||||
|
||||
with client:
|
||||
client.loop.run_until_complete(main())
|
||||
Reference in New Issue
Block a user