Skip to main content

Telethon secret chat plugin

Project description

Secret chat plugin for telethon, available on PyPi.

This is still a work in progress so expect more commits to it. Originally based on the End-to-End Encryption, Secret Chats document, but it wasn’t clear enough so I followed their advice and checked one of the implementations that had it (MadelineProto). Therefore, this plugin is based on Daniil’s implementation at its core.


  • ☒ Accepting secret chats
  • ☒ Creating secret chats
  • ☒ Closing secret chats
  • ☒ Sending text messages
  • ☒ Recieving text messages
  • ☒ Uploading/downloading media
  • ☒ Dealing with rekeying [1]
  • ☒ Saving secret chats keys to database [2]
  • ☐ Saving messages to database [3]
  • ☒ Automatic decryption/accepting/finishing
  • ☐ Compatibility with tdlib [4]
[1]Every 100 messages you need to recreate the auth key.
[2]Auth keys are saved client sides so if you restart the script you will lose all secret chats you had and can no longer recieve messages from them.
[3]There is no get_messages function in secret chats so users can’t see old messages.
[4]The secret chat implementation of tdlib differs from other clients, so applications like Telegram X or the mac client may not work with these chats.


Easiest way is to install it through pip

pip install telethon-secret-chat~=0.2


from telethon import TelegramClient
from telethon_secret_chat import SecretChatManager

client = TelegramClient(...)

async def replier(event):
    # all events are encrypted by default
    if event.decrypted_event.message and event.decrypted_event.message == "hello":
        await event.reply("**hi**") # parse_mode is markdown by default

async def new_chat(chat, created_by_me):
    if created_by_me:
        print("User {} has accepted our secret chat request".format(chat))
        print("We have accepted the secret chat request of {}".format(chat))

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

with client:

To start a secret chat you can call:


To use sqlite as a storage session you need to pass an sqlite connection to SecretChatManager:

manager = SecretChatManager(client, session=db_conn, auto_accept=True)
# you can also pass client.session from telethon as such
manager = SecretChatManager(client, session=client.session, auto_accept=True)

To manually accept incoming you can do as follow:

from telethon_secret_chat import SecretChatManager, SECRET_TYPES

manager = SecretChatManager(client, auto_accept=False)

In your handler, you can do the following:

await manager.accept_secret_chat(

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Built Distribution

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page