PHONE_CODE_EXPIRED Pyrogram, День назад всё работало
Есть бот, который должен входить в аккаунт тг. Использую Pyrogram он запрашивает ключи, номер телефона, если надо пароль.
@admin_router.message(F.text.lower() == 'авторизовать аккаунт')
async def account_start_auth(message: Message, state: FSMContext):
await message.answer(text='Хорошо, предоставьте мне api_id')
await state.set_state(AdminState.GET_API_ID)
@admin_router.message(AdminState.GET_API_ID)
async def account_get_api_id(message: Message, state: FSMContext):
await message.answer(text='Прекрасно, а теперь, предоставьте мне api_hash')
await add_data_account(message.from_user.id, 'api_id', message.text)
await state.set_state(AdminState.GET_API_HASH)
@admin_router.message(AdminState.GET_API_HASH)
async def account_get_hash(message: Message, state: FSMContext):
await message.answer(text='Замечательно, теперь мне нужен ваш номер телефона', reply_markup=phone_keyboard())
await add_data_account(message.from_user.id, 'api_hash', message.text)
await state.set_state(AdminState.GET_NUMBER)
@admin_router.message(AdminState.GET_NUMBER)
async def account_get_number(message: Message, state: FSMContext):
await add_data_account(message.from_user.id, 'number', message.contact.phone_number)
await forwarder.auth_user(message.from_user.id, message)
await state.set_state(AdminState.GET_CODE)
@admin_router.message(AdminState.GET_CODE)
async def account_get_code(message: Message, state: FSMContext):
code = message.text.replace(' ', '')
code = code.replace('.gfr', '')
if not await forwarder.get_code(message.from_user.id, code, message):
await state.set_state(AdminState.GET_PASS)
return
await state.clear()
@admin_router.message(AdminState.GET_PASS)
async def account_get_pass(message: Message, state: FSMContext):
await forwarder.get_pass(message.from_user.id, message.text, message)
await state.clear()
День назад всё работало хорошо, но сегодня КАЖДЫЙ код является устаревшим. Я менял прокси, я менял аккаунты с которых запрашивал, я менял токен бота. Вот функции для авторизации:
async def get_data_user(self, account_id):
user_data = await get_account(account_id)
api_id = user_data[1]
api_hash = user_data[2]
number = user_data[3]
phone_code_hash = user_data[4]
client = Client(f"session_{account_id}", api_id=api_id, api_hash=api_hash)
await client.connect()
return api_id, api_hash, number, phone_code_hash, client
async def auth_user(self, account_id, message: Message):
data_user = await self.get_data_user(account_id)
client = data_user[4]
result = await client.send_code(phone_number=data_user[2])
await add_data_account(account_id, 'num_hash', result.phone_code_hash)
await message.answer(text='Вам был отправлен код для аутентификации. Пожалуйста, введите его.')
async def get_code(self, account_id, code, message: Message):
data_user = await self.get_data_user(account_id)
client = data_user[4]
try:
await asyncio.sleep(3)
print(code)
await client.sign_in(phone_number=data_user[2], phone_code=code, phone_code_hash=data_user[3])
await message.answer(text='авторизация успешна')
return True
except SessionPasswordNeeded:
await message.answer("Для авторизации необходимо ввести пароль двухфакторной аутентификации.")
return False
except Exception as e:
print(e)
async def get_pass(self, account_id, password, message: Message):
data_user = await self.get_data_user(account_id)
client = data_user[4]
try:
await client.check_password(password=password)
await message.answer("Пароль принят.")
except Exception as e:
print(f"Ошибка:\n{e}")
Если необходимо предоставлю остальной код, но весь процесс авторизации тут. Ошибка возникает именно тут await client.sign_in(phone_number=data_user[2], phone_code=code, phone_code_hash=data_user[3])