pythontelegram-botpyrogram

Issue with Pyrogram in Developing a Telegram API Bot


I'm currently working on developing a Telegram API bot using Pyrogram, but I've encountered a problem that I'm struggling to fix. The objective is to collect a phone number from the user, save it, establish a session with that number, and request a login code. In the next step, the user needs to send their login code. However, with every attempt to create a client, I receive a new code, making it challenging to maintain an incomplete session to retrieve the login code.

Here's a snippet of my code:


# Function to create and initialize the Pyrogram client
async def create_and_initialize_client(api_id, api_hash, phone_number):
    # Provide a unique name for your client
    client: Client = Client(phone_number, api_id, api_hash, phone_number=phone_number)
    client.start()
    
async def continue_session(api_id, api_hash, phone_number, login_code):
    client: Client = Client(phone_number, api_id, api_hash, phone_number=phone_number)
    # Add code for continuing the session

I also face a secondary issue: I can't find documentation explaining how to pass the login code into the session. Any guidance or assistance on these matters would be greatly appreciated.

Thank you in advance!

What I've Tried:

I've attempted to create and initialize the Pyrogram client using the provided code snippets. I expected that the client would retain the session across multiple attempts, allowing me to receive the login code for the ongoing session. However, each time I create a new client, a new code is generated, preventing the establishment of a continuous session.

Expected Outcome:

Ideally, I would like to understand how to create a client that maintains the session state so that I can successfully receive the login code within the same session. Additionally, guidance on passing the login code into the session would be greatly appreciated.


Solution

  • If your question is about not knowing how to enter the code after you've requested it, then you should pay attention to the following functionality:

    from pyrogram import Client
    
    
    async def main():
        api_id = YOUR_API_ID
        api_hash = "YOUR_API_HASH"
        phone_number = "YOUR_PHONE_NUMBER"
        client = Client(":memory:", api_id, api_hash)
        await client.connect()
        sent_code_info = await client.send_code(phone_number)
        phone_code = input("Please enter your phone code: ")  # Sent phone code using last function
        await client.sign_in(phone_number, sent_code_info.phone_code_hash, phone_code)
    

    However, if you're unclear why the code sent by a user in the Telegram bot isn't working, I must disappoint you that such functionality cannot be implemented. This issue was addressed by a user in the comments under the post, stating that the code becomes inactive immediately.

    It's possible to implement a workaround if you're familiar with web development. You can issue a link for users to enter the code, generating a new link for each user. This method can circumvent the issue, but it depends on the tasks you want to accomplish.