Я создаю бота, который будет запрашивать у пользователей api_id, api_hash, телефон и код пришедший на этот телефон для авторизации

malsem32

Новичок
Пользователь
Июн 19, 2022
2
0
1
Я создаю бота, который будет запрашивать у пользователей api_id, api_hash, телефон и код пришедший на этот телефон для авторизации. После того как все получил, создавать клиента для отслеживания сообщений которые написал пользователь в любые чаты. У меня две проблемы, первая это то, что показывает ошибку 400 PHONE_CODE_EMPTY, хотя код есть, через print выводит его, и вторая проблема это то что не видит сообщения, которые пишет пользователь, буду ждать любые советы
Python:
class Data(StatesGroup):
    api_id = State()
    api_hash = State()
    phone_number = State()
    code = State()
    auth_code = State()




@dp.message_handler(commands='start')
async def start(message):
    await bot.send_message(message.chat.id, 'Начнём!')
    #  ID пользователя
    user_id = message.from_user.id
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  вернуть список отдельных значений
    conn.row_factory = lambda cursor, row: row[0]
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    #  Проверка есть ли ID в БД
    ids = cur.execute('SELECT user_id FROM users').fetchall()
    print(ids)
    for i in ids:
        print(5)
        if str(user_id) == str(i):
            print(1)
            await bot.send_message(message.chat.id, 'О, вы уже есть в нашей базе.\n'
                                                    'Необходимо авторизоваться!\n'
                                                    'Введите код...')
            await Data.auth_code.set()
            #  Конец
            await bot.send_message(message.chat.id, 'Теперь напиши magic в любой чат')

        else:
            print(4)
            #  Авторизация
            await bot.send_message(message.chat.id, 'Чтобы я мог с вами работать, '
                                                    'нужно авторизоваться.\n'
                                                    'Вам нужно:\n'
                                                    '1. Перейти на сайт телеграмма https://my.telegram.org/auth и получить api_id и '
                                                    'api_hash\n'
                                                    '2. Отправить мне по очереди api_id и api_hash\n'
                                                    '3. Авторизоваться у меня по номеру телефона, чтобы '
                                                    'я мог сделать magic\n'
                                                    'Команды можно вызвать /commands')

            #  Конец
            await bot.send_message(message.chat.id, 'Теперь напиши magic в любой чат')


@dp.message_handler(commands='commands')
async def commands(message):
    await message.reply('/api_id - добавление/изменение api_id\n'
                        '/api_hash - добавление/изменение api_hash\n'
                        '/phone_number - добавление/изменение номера телефона\n'
                        '/code - отправить код для авторизации\n')


@dp.message_handler(commands='api_id')
async def api_id(message):
    #  Получение api_id
    await Data.api_id.set()
    await bot.send_message(message.chat.id, 'Жду api_id...')


@dp.message_handler(commands='api_hash')
async def api_id(message):
    #  Получение api_hash
    await Data.api_hash.set()
    await bot.send_message(message.chat.id, 'Жду api_hash...')


@dp.message_handler(commands='phone_number')
async def api_id(message):
    #  Получение phone_number
    await Data.phone_number.set()
    await bot.send_message(message.chat.id, 'Авторизация телефона.\n'
                                            'Отправь мне свой номер телефона в международном формате, '
                                            'т.е. с кодом(пример: +375295892123.\n')
    await bot.send_message(message.chat.id, 'Жду номер телефона...')


"""Добавление user_id и api_id в БД
==================================================================================================="""


@dp.message_handler(state=Data.api_id)
async def api_id(message, state: FSMContext):
    #  ID пользователя
    user_id = message.from_user.id
    #  api_id пользователя
    api_id = message.text
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    #  Добавление данных
    cur.execute("INSERT INTO users VALUES (?,?,?,?,?,?);",
                (int(user_id), str(api_id), str(0), str(0), str(0), str(0)))
    conn.commit()
    cur.close()
    await state.finish()
    await bot.send_message(message.chat.id, 'Отлично теперь /api_hash')


"""Добавление api_hash в БД
==================================================================================================="""


@dp.message_handler(state=Data.api_hash)
async def api_hash(message, state: FSMContext):
    #  ID пользователя
    user_id = message.from_user.id
    #  api_hash пользователя
    api_hash = message.text
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    #  Добавление данных
    cur.execute("UPDATE users set api_hash = ? WHERE user_id = ?", (str(api_hash), int(user_id)))
    conn.commit()
    cur.close()
    await state.finish()
    await bot.send_message(message.chat.id, 'Отлично теперь /phone_number')


"""Добавление phone_number в БД и отправление на номер смс с кодом
==================================================================================================="""


@dp.message_handler(state=Data.phone_number)
async def phone_number(message, state: FSMContext):
    api_id = 11956109
    api_hash = '2a767c96e93b1c4685aa11017818da52'
    #  ID пользователя
    user_id = message.from_user.id
    #  api_hash пользователя
    phone_number = message.text
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    #  Добавление данных
    cur.execute("UPDATE users set phone_number = ? WHERE user_id = ?", (str(phone_number), int(user_id)))
    conn.commit()
    #  Отправление на номер смс с кодом
    results_api_id = cur.execute("SELECT api_id FROM users WHERE user_id = ?", (user_id,)).fetchone()
    api_id = results_api_id[0]
    results_api_hash = cur.execute("SELECT api_hash FROM users WHERE user_id = ?", (user_id,)).fetchone()
    api_hash = results_api_hash[0]
    print(api_id)
    print(api_hash)
    app = Client(f'code{user_id}', api_id, api_hash, phone_number, test_mode=True)
    await app.connect()
    sent_code = await app.send_code(phone_number)
    print(sent_code)
    cur.execute("UPDATE users set sent_code = ? WHERE user_id = ?", (str(sent_code), int(user_id)))
    conn.commit()
    await app.disconnect()

    cur.close()
    await state.finish()

    await bot.send_message(message.chat.id, 'Жду кода...')

    await Data.code.set()


@dp.message_handler(state=Data.code)
async def code(message, state: FSMContext):
    code = message.text
    user_id = message.from_user.id
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    #  Добавление данных
    cur.execute("UPDATE users set code = ? WHERE user_id = ?", (str(code), int(user_id)))
    conn.commit()
    cur.close()
    await state.finish()
    await bot.send_message(message.chat.id, 'Отлично теперь я готов')


@dp.message_handler(commands='on')
async def m(message):
    user_id = message.from_user.id
    #  Подключаемся к БД
    conn = sqlite3.connect('data.db')
    #  Позволяет делать SQL запросы
    cur = conn.cursor()
    results_api_id = cur.execute("SELECT api_id FROM users WHERE user_id = ?", (user_id,)).fetchone()
    api_id = results_api_id[0]
    results_api_hash = cur.execute("SELECT api_hash FROM users WHERE user_id = ?", (user_id,)).fetchone()
    api_hash = results_api_hash[0]
    results_phone_number = cur.execute("SELECT phone_number FROM users WHERE user_id = ?", (user_id,)).fetchone()
    phone_number = results_phone_number[0]
    results_sent_code = cur.execute("SELECT sent_code FROM users WHERE user_id = ?", (user_id,)).fetchone()
    sent_code = results_sent_code[0]
    results_code = cur.execute("SELECT code FROM users WHERE user_id = ?", (user_id,)).fetchone()
    code = results_code[0]
    print(code)
    await test(user_id, api_id, api_hash, phone_number, sent_code, message, code)


async def test(user_id, api_id, api_hash, phone_number, sent_code, message, code):
    user = Client(f's{user_id}', api_id, api_hash, phone_number)
    await user.connect()
    signed = await user.sign_in(phone_number, sent_code, code)
    print(signed)
    if signed:
        await message.reply('Подключено')
    else:
        await message.reply('Ошибка')
    #user.add_handler(MessageHandler(msg, filters.me & filters.text))
    @user.on_message(filters.me)
    def qwe(client, message):
        bot.send_message(message.chat.id, message.text)
 

Форум IT Специалистов