Primitive unstable and incomplete Python library to work with Telegram's Secret Chats based on Pyrogram.
This library was just a test of mine, i don't even remember if it works π.
Note This library is not maintained anymore, it was made for personal use and is not production ready.
This project is basically derived from painor/telethon-secret-chat and Telegram's docs.
The e2e schema is taken from tdlib.
I don't know if this library is even useful, but i'm sharing it anyway.
Warning This library is not stable, it may not work at all, i can't guarantee its security, some pre-generated raw methods are already provided because the generator is pretty broken.
git clone https://github.com/doggyhaah/pyrosecret
cd pyrosecret
pip install .
from pyrogram import Client
from pyrogram_secret_chat import SecretChatManager
from pyrogram_secret_chat.types import SecretEvent
import logging
from io import BytesIO
from pyrogram_secret_chat.raw.e2e import DecryptedMessageMediaPhoto
from pyrogram_secret_chat import save_photo
client = Client("prod2", test_mode=False, api_id=123456, api_hash='yourapihash')
ids = []
async def replier(event: SecretEvent):
print(event)
print("event received")
if event.decrypted_event.raw.message:
if event.base_update.message.chat_id not in ids:
ids.append(event.base_update.message.chat_id)
await event.reply("Hello there!")
else:
await event.reply(event.decrypted_event.raw.message) # parse_mode is markdown by default
else:
if event.decrypted_event.raw.media and isinstance(event.decrypted_event.raw.media, DecryptedMessageMediaPhoto):
bio = BytesIO()
media = event.decrypted_event.raw.media
save_photo(event.decrypted_event, bio)
sc = manager.get_secret_chat(event.base_update.message.chat_id)
await manager.send_secret_photo(sc, bio, bio, media.thumb_w, media.thumb_h, media.w, media.h, media.size, media.caption)
async def new_chat(chat, created_by_me):
if created_by_me:
print("User {} has accepted our secret chat request".format(chat))
else:
t = "nuova chat top secret {}".format(chat)
print(t)
await client.send_message("me", t)
await client.send_message("me", "admin id: {}".format(chat.admin_id))
log = logging.getLogger('secretchats')
log.setLevel(logging.DEBUG)
manager = SecretChatManager(client, auto_accept=True,
new_chat_created=new_chat) # automatically accept new secret chats
manager.add_secret_event_handler(func=replier) # we can specify the type of the event
client.run()
Note Due to the fact that secret chats are end-to-end encrypted, if the user tries to accept a secret chat which was already accepted from another session (for example if the user is online from an official client).
This project is licensed under the MIT License - see the LICENSE file for details
Everyone is welcome to contribute to this project maybe even continuing it.