Задать вопрос
Lakika
@Lakika
Sicario

Не могу поднять бота на python3 что не так делаю?

Написал небольшой скрипт телеграмм бота, собственно вот он:
import telegram
from telegram.ext import Updater, MessageHandler, CommandHandler, MessageFilters 
import dns.resolver


#токен от @BotFather
TOKEN = 'my_token'

def start(update, context):
    context.bot.send_message(chat_id=update.effective_chat.id,
                             text='Привет! Я бот, который может дать информацию о домене. Просто отправь мне сообщение со списком доменов.')

def domain_info(update, context):
    domains = update.message.text.split('\n')

    for domain in domains:
        try:
            # получаем IP-адрес сайта
            ip = dns.resolver.resolve(domain, 'A')[0].address
            # получаем NS-записи сайта
            ns = dns.resolver.resolve(domain, 'NS')[0].to_text()
            # получаем A-записи сайта
            a = dns.resolver.resolve(domain, 'A')[0].to_text()

            # формируем сообщение с информацией о домене
            message = f"Информация о сайте {domain}:\nIP-адрес: {ip}\nNS-записи: {ns}\nA-записи: {a}"
        except:
            message = f"Не удалось получить информацию о домене {domain}"

        # отправляем сообщение с информацией о домене
        context.bot.send_message(chat_id=update.effective_chat.id,
                                 text=message)

def main():
    updater = Updater(token=TOKEN, use_context=True)
    dispatcher = updater.dispatcher

    # обработчик команды /start
    dispatcher.add_handler(CommandHandler('start', start))

    # обработчик сообщений с доменами
    dispatcher.add_handler(MessageHandler(MessageFilters.text & ~MessageFilters.command, domain_info))

    # запускаем бота
    updater.start_polling()

if __name__ == '__main__':
    main()


При запуске, выдает ошибку:

python3 bot.py
Traceback (most recent call last):
  File "/root/mybot/bot.py", line 2, in <module>
    from telegram.ext import Updater, MessageHandler, CommandHandler, MessageFilters
ImportError: cannot import name 'MessageFilters' from 'telegram.ext' (/usr/local/lib/python3.9/dist-packages/telegram/ext/__init__.py)


Сразу скажу, пробовал менять MessageFilters на просто Filters, не помогло, а также на BaseFilter

Далее пробовал переустанавливать обновить компонент..

pip install -U python-telegram-bot
Requirement already satisfied: python-telegram-bot in /usr/local/lib/python3.9/dist-packages (20.2)
Requirement already satisfied: httpx~=0.23.3 in /usr/local/lib/python3.9/dist-packages (from python-telegram-bot) (0.23.3)
Requirement already satisfied: certifi in /usr/lib/python3/dist-packages (from httpx~=0.23.3->python-telegram-bot) (2020.6.20)
Requirement already satisfied: httpcore<0.17.0,>=0.15.0 in /usr/local/lib/python3.9/dist-packages (from httpx~=0.23.3->python-telegram-bot) (0.16.3)
Requirement already satisfied: rfc3986[idna2008]<2,>=1.3 in /usr/local/lib/python3.9/dist-packages (from httpx~=0.23.3->python-telegram-bot) (1.5.0)
Requirement already satisfied: sniffio in /usr/local/lib/python3.9/dist-packages (from httpx~=0.23.3->python-telegram-bot) (1.3.0)
Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.9/dist-packages (from httpcore<0.17.0,>=0.15.0->httpx~=0.23.3->python-telegram-bot) (0.14.0)
Requirement already satisfied: anyio<5.0,>=3.0 in /usr/local/lib/python3.9/dist-packages (from httpcore<0.17.0,>=0.15.0->httpx~=0.23.3->python-telegram-bot) (3.6.2)
Requirement already satisfied: idna in /usr/lib/python3/dist-packages (from rfc3986[idna2008]<2,>=1.3->httpx~=0.23.3->python-telegram-bot) (2.10)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv


Смотрю версию: pip show python-telegram-bot
Name: python-telegram-bot
Version: 20.2
Summary: We have made you a wrapper you can't refuse
Home-page: https://python-telegram-bot.org/
Author: Leandro Toledo
Author-email: devs@python-telegram-bot.org
License: LGPLv3
Location: /usr/local/lib/python3.9/dist-packages
Requires: httpx
Required-by:


Как решить уже не знаю...
  • Вопрос задан
  • 972 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@Styxian
Вы неправильно импортируете фильтры.

Правильное использование
Импорт:
from telegram.ext import Updater, MessageHandler, CommandHandler, filters

Добавление в обработчик:
dispatcher.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, domain_info))


Почитайте документацию по работе с фильтрами и примеры кода:
https://github.com/python-telegram-bot/python-tele...
https://github.com/python-telegram-bot/python-tele...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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