I am writing a telegram bot with telethon which gets access to several chats in the account and parses messages from it into the database.
When I try to use this bot I try to login, Telegram sends me authentication code. When I send this authentication code to the bot, authentication fails and telegram sends me such a message:
Nobody gained access to your chats because the login was not completed. The code was entered correctly, but sign in was not allowed, because this code was previously shared by your account. Please don’t share login codes with others, because they allow anyone to log in to your account and access your chats.
Here is a code snippet of authentication:
<code>async def handle_app_info(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
response = event.message.text
error_message = "Error: Invalid input format. Please provide all required information."
await bot.send_message(user_id, error_message)
phone_number, app_id, app_hash, app_name = parts
client = TelegramClient(StringSession(), app_id, app_hash)
if not await client.is_user_authorized():
await client.send_code_request(phone_number)
message = "Please enter the code sent to your Telegram app:"
await bot.send_message(user_id, message)
# Set user state to WAITING_CODE
db.set_user_state(user_id, states.WAITING_CODE)
# Set user state to WAITING_CODE
app_state = AppState.WAITING_CODE
last_message_id = event.message.id
# Store the client object and phone number in the respective dictionaries
clients[user_id] = client
phone_numbers[user_id] = phone_number
app_ids[user_id] = app_id
app_hashes[user_id] = app_hash
app_names[user_id] = app_name
async def handle_code(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
# Handle code input by the user
code = event.message.text
# Retrieve the client object and phone number from the respective dictionaries
client = clients[user_id]
phone_number = phone_numbers[user_id]
app_id = app_ids[user_id]
app_hash = app_hashes[user_id]
app_name = app_names[user_id]
# Sign in the user with the code they provided
await client.sign_in(phone_number, code)
await bot.send_message(user_id, f"Failed to sign in: {e}")
# Save the session string
session_string = client.session.save()
# Save all connection data to the database
db.save_connection_data(user_id, phone_number, app_id, app_hash, app_name, session_string)
message = "Your Telegram app has been successfully connected to the bot."
await bot.send_message(user_id, message)
app_state = AppState.MAIN_MENU
last_message_id = event.message.id
db.set_user_state(user_id, states.MAIN_MENU)
<code>async def handle_app_info(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
response = event.message.text
parts = response.split()
if len(parts) != 4:
error_message = "Error: Invalid input format. Please provide all required information."
await bot.send_message(user_id, error_message)
return
phone_number, app_id, app_hash, app_name = parts
client = TelegramClient(StringSession(), app_id, app_hash)
await client.connect()
if not await client.is_user_authorized():
await client.send_code_request(phone_number)
message = "Please enter the code sent to your Telegram app:"
await bot.send_message(user_id, message)
# Set user state to WAITING_CODE
db.set_user_state(user_id, states.WAITING_CODE)
# Set user state to WAITING_CODE
app_state = AppState.WAITING_CODE
last_message_id = event.message.id
# Store the client object and phone number in the respective dictionaries
clients[user_id] = client
phone_numbers[user_id] = phone_number
app_ids[user_id] = app_id
app_hashes[user_id] = app_hash
app_names[user_id] = app_name
async def handle_code(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
# Handle code input by the user
code = event.message.text
# Retrieve the client object and phone number from the respective dictionaries
client = clients[user_id]
phone_number = phone_numbers[user_id]
app_id = app_ids[user_id]
app_hash = app_hashes[user_id]
app_name = app_names[user_id]
# Sign in the user with the code they provided
try:
await client.sign_in(phone_number, code)
except Exception as e:
await bot.send_message(user_id, f"Failed to sign in: {e}")
return
# Save the session string
session_string = client.session.save()
# Save all connection data to the database
db.save_connection_data(user_id, phone_number, app_id, app_hash, app_name, session_string)
message = "Your Telegram app has been successfully connected to the bot."
await bot.send_message(user_id, message)
# Reset user state
app_state = AppState.MAIN_MENU
last_message_id = event.message.id
# Reset user state
db.set_user_state(user_id, states.MAIN_MENU)
</code>
async def handle_app_info(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
response = event.message.text
parts = response.split()
if len(parts) != 4:
error_message = "Error: Invalid input format. Please provide all required information."
await bot.send_message(user_id, error_message)
return
phone_number, app_id, app_hash, app_name = parts
client = TelegramClient(StringSession(), app_id, app_hash)
await client.connect()
if not await client.is_user_authorized():
await client.send_code_request(phone_number)
message = "Please enter the code sent to your Telegram app:"
await bot.send_message(user_id, message)
# Set user state to WAITING_CODE
db.set_user_state(user_id, states.WAITING_CODE)
# Set user state to WAITING_CODE
app_state = AppState.WAITING_CODE
last_message_id = event.message.id
# Store the client object and phone number in the respective dictionaries
clients[user_id] = client
phone_numbers[user_id] = phone_number
app_ids[user_id] = app_id
app_hashes[user_id] = app_hash
app_names[user_id] = app_name
async def handle_code(bot, event):
global app_state, last_message_id
user_id = event.message.peer_id.user_id
# Handle code input by the user
code = event.message.text
# Retrieve the client object and phone number from the respective dictionaries
client = clients[user_id]
phone_number = phone_numbers[user_id]
app_id = app_ids[user_id]
app_hash = app_hashes[user_id]
app_name = app_names[user_id]
# Sign in the user with the code they provided
try:
await client.sign_in(phone_number, code)
except Exception as e:
await bot.send_message(user_id, f"Failed to sign in: {e}")
return
# Save the session string
session_string = client.session.save()
# Save all connection data to the database
db.save_connection_data(user_id, phone_number, app_id, app_hash, app_name, session_string)
message = "Your Telegram app has been successfully connected to the bot."
await bot.send_message(user_id, message)
# Reset user state
app_state = AppState.MAIN_MENU
last_message_id = event.message.id
# Reset user state
db.set_user_state(user_id, states.MAIN_MENU)
I have tried to disable 2FA on telegram, but it has not help.
Does anybody have an idea what I am doing wrong? Thanks for your help