Я создаю бота, который будет запрашивать у пользователей 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)