Задать вопрос
@sparr0w1

Почему бот pyrogram не работает?

Задача бота отслеживать все сообщение посланные мной в любой чат Telegram. Бот запускается, ошибка не появляется, но при отправке сообщений бот их не видит и не выводит текст этого сообщения.

import os
import asyncio
from pyrogram import Client, filters
from pyrogram.errors import SessionPasswordNeeded, PasswordHashInvalid, PhoneCodeInvalid
import datetime
import json

async def create_session_telegram():
    nickname = input('Введите nickname для создания новой записи:\n')
    number = input('Введите номер для регистрации в приложении\n(Например: +79991113322):\n')
    print('Далее понадобится api_id и api_hash.\nДля его получения нужно перейти на сайт my.telegram.org\n'
          '     - Зайти в аккаунт\n'
          '     - Зайти во вкладку "API development tools"\n'
          '     - Скопировать api_id и api_hash')
    api_id = str(input('Введите api_id:\n'))
    api_hash = str(input('Введите api_hash:\n'))

    while True:
        client = Client(name=nickname, api_id=api_id, api_hash=api_hash, workdir=f'{os.getcwd()}/session')
        await client.start()

        try:
            send_code_info = await client.send_code(phone_number=number)
            phone_code = input('Введите код из сообщения Telegram:\n')
            await client.sign_in(number, send_code_info.phone_code_hash, phone_code)
            return client
        except SessionPasswordNeeded:
            password = input('Требуется пароль (2FA)\nВведите пароль:\n')
            await client.check_password(password)
            return client
        except PhoneCodeInvalid as e:
            print(f'Неправильный код из сообщения - {e}')
        except PasswordHashInvalid as e:
            print(f'Неправильный пароль - {e}')
        await client.send_message("me", "Login complete!\n Save session!")
        print('Проверочное сообщение отправлено, сессия создана.')

async def choose_account():
    session_dir = f'{os.getcwd()}/session'
    accounts = os.listdir(session_dir)
    if len(accounts) != 0:
        print("Выберите учетную запись из списка:")
        for i, account in enumerate(accounts, 1):
            print(f"{i}. {account.split('.')[0]}")
        while True:
            try:
                choice = input("Введите номер учетной записи (0 для регистрации новой сессии): ")
                choice = int(choice)
                if 1 <= choice <= len(accounts):
                    return Client(f'session/{accounts[choice - 1].split(".")[0]}')
                elif choice == 0:
                    return await create_session_telegram()
                else:
                    print("Неверный номер. Попробуйте снова.")
            except ValueError:
                print("Неверный ввод. Попробуйте снова.")
    else:
        return await create_session_telegram()


async def main():
    app = await choose_account()

    @app.on_message(filters.me)
    async def save_chat_messages(client, message):
        print(f"Received message: {message.text}")

    await app.start()

    me = await app.get_me() 

    print(f'Bot is running in chat: {me.first_name}')

    while True:
        await asyncio.sleep(1) 

if __name__ == '__main__':
    asyncio.run(main())
  • Вопрос задан
  • 465 просмотров
Подписаться 1 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы