Telegram ext как установить

Создаем Telegram-бот, работаем c I/O Bound нагрузкой, подключаем фичи Google Drive и пишем на C внутри Python.

Введение

В этой инструкции мы создадим приложение, которое интегрируется со сторонними API. Разберем I/O Bound нагрузку и поработаем с асинхронностью в Python.

Часть сервера Telegram-бота мы будем писать на С, так как он считается перформанс-ориентированным языком, поэтому посмотрим также модуль обработки СPU Bound нагрузки, использующийся для сложных вычислений процессора.

Мы постараемся объяснить все: от развертывания каждого модуля до настройки проекта на удаленном сервере.

Работать все это будет в вебе, поэтому для примера клиент-серверной архитектуры используется Telegram. У нас по дефолту будет мобильный+десктопный клиент, поэтому не придется писать фронтенд самому.

Теория

У многих приложений есть открытый интерфейс (API), к которому можно подключиться из своих программ. Например, так можно подключиться к YouTube и попросить сервис прислать описания всех роликов из конкретного плейлиста.

Как установить библиотеку в PyCharm. Что делать при Module Not Found Error

Что такое CPU Bound и I/O Bound нагрузка. Примеры

  1. Есть какая-то задача Х, которая сильно нагружает процессор. Например, одни из самых медленных операций, которые выполняет современный процессор — деление или тригонометрические функции типа sin или cos. Такие сложные для процессора операции называют CPU Bound нагрузкой.
  2. Если операции упираются в скорость сети, скорость записи или чтения какого-то файла с диска или ожидания запроса из базы данных — это I/O Bound нагрузка. Отправили запрос к серверу и ждете, пока он придет — процессор простаивает, как правило, 90% времени.

Как эти проблемы решаются в Python?

  1. Можно использовать модуль мультипроцессинга, который распараллелит вычисления на несколько процессов на нескольких реальных ядрах. Первый оверхед — создание новых процессов в операционной системе — достаточно дорогая операция. А их взаимодействие — второй оверхед, то есть обмен данными между ними — не самая простая вещь. Как минимум, чтобы передать объект между ними, объект должен быть сериализован и десериализован соответствующе. Если кратко: сериализация — это очень дорого.
  2. Мультитрединг — дешевле, особенно вскейле, то есть когда мы планируем масштабировать и создавать большие пулы потоков. Потому что поток — это более легковесная сущность с точки зрения операционной системы и в сравнении с процессом, как минимум.

Самое важное, что потоки расшаривают одну и ту же область памяти внутри одного процесса. То есть обмен данными между ними организован гораздо проще.

В Python есть GIL или блок интерпретатора, с которым могут быть проблемы. В каждый конкретный момент времени может работать только один, залоченный поток, а другим приходится ждать.

Разработка Telegram Bot на Python. (0. Установка программ)

В случае решения второй проблемы и I/O Bound нагрузки, то в Python она решается асинхронным программированием.

Практика

О том, как создаются Telegram-боты, можно посмотреть здесь. Начнем с нашего интерфейса.

Возьмем первую библиотеку для Python: Python-telegram-bot.

Чтобы не захламлять компьютер чем-то лишним, будем использовать питоновскую виртуальную среду (venv). Это похоже на изолированный контейнер, в котором можно проводить любые опыты, и доступно это только внутри этой папки.

Сначала нам нужен токен от BotFather для аутентификации с API Telegram. Плюс здесь можно устанавливать ряд других настроек: изменить описание, поставить моды. BotFather по сути представляет собой админку.

Токен мы будем хранить в скрытых данных. За это в Python отвечает модуль dotenv, который также ставится внутри нашей виртуалки, и в сам файл уже переносим токен.

from bot.bot import start, list_files, upload_file, search_button, cython, pi_button, FIRST, SECOND from dotenv import load_dotenv from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackQueryHandler, ConversationHandler import os async def hello(update: Update, context: ContextTypes.DEFAULT_Type) ->Name: Name: await update.message.replay_text(f’Hello(update.effective_user.first_name)’) load_dotenv() application = ApplicationBuilder().token(os.getenv(‘TOKEN’)).build() app.add_handler(CommandHandler(“hello”, hello)) app.run.polling()

Чтобы подружить Telegram с Google Drive воспользуемся API /quickstart/python. Здесь нам нужно получить что-то вроде токена, как и в случае аутентификации с API Telegram, только в Google API это называется(Credentials). В main.py мы должны добавить и токен, и обработчик функции start.

По этой логике нужно написать еще одну функцию и добавить ее в еще один handler уже для сэмпла от Google Drive.

Добавляем еще один CommandHandler (обработчик команд или все, что мы пишем через слэш).

В Telegram, проверить работу функции можно командой /files, которую мы можем легко добавить в админке BotFather

По коду Google: мы достаем секретки и вытаскиваем все файлы, дальше выводим их в консоль. Можно сделать, чтобы ответ приходил не в консоль сервера, а сразу в бот на клиент.

Загрузка файлов

Для демонстрации возможностей добавим еще и загрузку файлов. Google предлагает здесь обширный список того, что можно делать: Работа со всеми видами файлов, работа с UI Google Drive, и так далее.

Нам для интерактивности нужна динамика, поэтому мы будем грузить файл сначала на наш сервер через интерфейс Telegram, а уже оттуда его перенаправлять в Google Drive.

Чтобы загрузить файл сначала к нам на сервер, воспользуемся вот этим код-сниппетом из библиотеки telegram-bot-api а конкретно Download file.

Промежуточный итог

У нас есть сервер. Место, где мы разворачиваем наш код: удаленный или наш компьютер. Там мы запускаем наш Telegram-бот. Через интерфейс Telegram-бота, который нам дается по стандарту, мы можем загрузить файл, и он будет у нас лежать либо на компьютере, либо на удаленном сервере.

Этим сниппетом сначала загружаем файлы на компьютер. В отдельную функцию вынесем аутентификацию с Google Drive, чтобы было почище. Дальше во все захардкоденные сниппеты Google мы добавим наши динамические данные в виде имен файлов и путей. Все это достается из аргументов Update и Context.

Еще по теме:  Делать свои темы в Телеграмме

Добавим также обработчик команд MessageHandler для медиасообщений.

Теперь, если вызвать эту функцию, то сначала файл появится в нашей папке Downloaded, а потом в Google Drive.

В конечном счете код в файле main.py у нас должен выглядеть так:

from bot.bot import start, list_files, upload_file, search_button, cython, pi_button, FIRST, SECOND from dotenv import load_dotenv from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters, CallbackQueryHandler, ConversationHandler import os def main(): import cProfile import pstats load_dotenv() application = ApplicationBuilder().token(os.getenv(‘TOKEN’)).build() application.add_handler(CommandHandler(‘start’, start)) with cProfile.Profile() as pr: application.add_handler(CommandHandler(‘files’, list_files)) stats = pstats.Stats(pr) stats.sort_stats(pstats.SortKey.TIME) stats.dump_stats(filename=’profiling.prof’) conv_handler = ConversationHandler( entry_points=[CommandHandler(«cython», cython)], states=< FIRST: [CallbackQueryHandler(search_button)], SECOND: [CallbackQueryHandler(pi_button)], >, fallbacks=[CommandHandler(«cython», cython)], ) application.add_handler(conv_handler) application.add_handler(MessageHandler(filters.Document.ALL, upload_file)) application.run_polling() if __name__ == ‘__main__’: main()

На этом мы закончили работу с I/O Bound нагрузкой и ее функциями. А что если мы хотим добавить функциональность по нагрузке процессора? Вариаций действительно много. Можно сделать промежуточный лэйер, который будет брать видео, которые мы грузим, монтажить их в клип, сжимать и выгружать на Google Drive уже готовые препродакшн видео.

Модуль для сложных вычислений на процессоре

Следующая фича на бэкенде. Мы сейчас добавим модуль для CPU Bound обработки именно на процессоре, и делать это будет Python в связке с языком С. Более того, делать мы это будем в нескольких потоках. То есть мы отключим питоновский GIL.

Потенциально это может создать много проблем с синхронизацией, но тема многопоточности — это отдельная история, которую мы в рамках инструкции вынесем за скобки.

Первый модуль будет большой аллокацией + бинарный поиск по массиву. Заодно так проверим, как это работает. Папка lowlevel для C-файлов и сразу заведем модуль с парой простых функций.

int*allocate(int N) int* ptr = malloc(sizeof(int)* N);

Выделяем память для массива данных. Внутри функции поиска элементов будем вызывать наши функции для аллокации и генерации данных. Так можно увидеть наглядно, как работает процессор линейно, в нескольких потоках и в нескольких процессах. Эта практика сейчас используется для наглядности, но в боевых проектах так делать не стоит.

Чтобы вызывать код на С из-под Python нам потребуется Cython. Это суперсет Python, который позволяет писать на C прямо внутри Python. Чтобы все это работало, нужно поставить это в виртуалку и добавить файл для интерфейса Python и C.

cdef extern from «lowlevel/module.c» nogil; int binary_search_imp(int index) cdef int b_search_(int index):

Затем создаем промежуточную функцию, которая будет вызывать нашу экспортированную C функцию.

cdef int b_search(int index): return binary_search_impl(index); def binary_search(int index, results = None): cdef int result; with nogil: result = b_search(index); if results is not None: results.append(result) return result

Самое важное — поставить аннотацию nogil, то есть здесь мы отключаем лок интерпретатора (GIL).

Итак, у нас есть С файл с core-функциями. У нас есть файл, чтобы этими функциями пользоваться в самом Python.

Теперь в новом файле опишем все Python-функции. Чтобы не путаться, назовем его, например, performance.py. В него сразу добавим функцию по вычислению дельты времени, от начала и конца исполнения. Она позволит наглядно увидеть скорость Python в линейном режиме, многопоточном и в многопроцессном.

Функция, внутри которой есть функция-обертчик, где есть вызов функции, которую мы декорируем. Чтобы протестить все, что мы написали, нам нужны три основных функции.

Линейная. Все вычисления будут происходить по очереди в одном потоке, как обычно работает Python. Асинхронность здесь не сработает, потому что все это нагружает именно процессор, а не любого рода ввод/вывод.

def linear(N) results = [] binary_search(N, results) return results

Многопоточная. Создаем пять потоков по одному вызову в каждом.

def multithreaded(N): results = []

Мультипроцессинговая. Функция с изолированным друг от друга процессами: shared.list.

shared.list. def multithreaded(N): results = mp.Managed.lists()

Теперь перейдем к следующему конфигу, по настройке Cython. Назовем его setup.py. Что здесь должно быть?

  • файл, который нужно скомпилировать,
  • модуль, который мы создаем и будем использовать,
  • функция setup, которая будет все это структурировать.

Код выглядит так:

from setuptools import setup from distutils.extension import Extension from Cython.Distutils import build_ext sourceFiles = [‘bot/nogil.pyx’] ext_modules = [ Extension(«nogil», sourceFiles ), ] setup( name=’google drive app’, cmdclass=, ext_modules=ext_modules )

Добавим простой bash-script, чтобы собирать все было удобнее.

# !/bin/bash [! -e «nogil.c» ] || rm «nogil.c» find . -name «*.so» -type f -delete python3 setup.py build_ext -b build mv bot/*.c bot/lowlevel/

Теперь все должно адекватно пересобираться и раскладываться по своим местам.

Чтобы в самом Telegram-боте это выглядело красиво, добавим пару кнопок. В Inline-боте нужны две функции: описание и кнопка + события, которые будут происходить, когда мы будем на нее нажимать.

Вызываем функцию бинарного поиска в наших 3-х тестах. Линейном, многопоточном и многопроцессном, дергаем наши три функции. Добавляем обработчики для кнопок и можно тестировать.

Почти секунда у нас уйдет, чтобы выделить необходимую память для каждого вызова функции. Многопоточность обгоняет линейную более чем на 50%. Многопроцессность также быстрее, но все же уступает многопоточности.

В конце у нас должен получиться примерно такой код в bot.py:

Тестируем на Linux сервере

Мы будем использовать последнюю версию Ubuntu и выберем самое простое железо. Кроме этого, с помощью Shared Line можно использовать только 10% ресурсов, поэтому это будет еще дешевле, но под наш pet-проект хватит. В день такая конфигурация будет стоить не больше 15 рублей.

Поднимаем и обновляем там все, потому что это fresh Linux. Далее загружаем весь код бота на сервер, и можно приступать к тестированию: закинем пару файлов в наш Telegram-бот. Тестируем работу загрузки файлов. Вывода файлов, и сами функции по нагрузке CPU bound вычислений.

Заключение

Мы подключаемся к открытому API Google Drive, и вместо того, чтобы в самом диске нажимать разные кнопки, мы можем управлять им из-под Telegram-бота. Сделать это можно не только с диском, но и с любым сервисом, у которого есть открытый API.

Еще по теме:  Как посмотреть свои комментарии в Телеграмме с телефона

Кроме этого, мы рассмотрели пару фич для работы с CPU Bound нагрузками, что может помочь разгрузить какие-то сложные для процессора вычисления.

Зарегистрируйтесь в панели управления

И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.

Источник: selectel.ru

Как учить Python с нуля с удовольствием: пишем своего чат-бота

Привет! Меня зовут Илья Осипов, я методист курса программирования на Python «Девман» и больше 5 лет пишу код на этом языке. Сегодня расскажу, как новичку сделать полезного чат-бота.

Python — классный язык программирования. Но многие новички учат его неправильно: почти все онлайн-курсы, тренажёры, книги и видео предлагают начинать учить Python с нуля с каких-то странных задач, вроде: «Давайте решим вот эту математическую задачку» или «Давайте напишем рекурсивный поиск чисел Фибоначчи». Вы уже тоже зеваете от скуки?

Нет, удовольствие от программирования совсем не в этом, а в том, чтобы решать реальные проблемы. Например, я втянулся в программирование, когда писал чат-бота для своего вуза. Расписание на сайте было очень неудобно смотреть. Я решил потратить время и написать чат-бота, который будет присылать мне расписание занятий в более удобном виде. Оказалось, что другим студентам тоже было неудобно, и спустя год в чат-боте накопилось 4 тысячи пользователей.

Разработчик Форсайт АО «Гринатом» , Москва, можно удалённо , По итогам собеседования

Как раз на стыке между освоением синтаксиса и решением реальных проблем, как мне кажется, и сдаются большинство начинающих программистов. Совершенно не понятно как перейти от «сложить два числа» к написанию чего-то стоящего, чем можно похвастаться родителям, друзьям, жене и собаке.

Если вы тоже обнаружили себя в этой «яме», то этот туториал для вас. Дайте себе ещё один шанс.

Шаг 1. Зайдите в Repl.it

Создайте песочницу для языка Python. Ничего устанавливать не нужно. Просто откройте эту ссылку в соседней вкладке.

Придётся зарегистрироваться, но, думаю, вы разберётесь.

А вы уже нажали кнопку? Нет? Идите жмите!

А вы уже нажали кнопку? Нет? Идите жмите!

Шаг 2. Пройдите шаг 1

Эй, хватит читать! Так дела не делаются! Чтобы научиться программировать на Python — нужно писать код своими руками, а не смотреть, как кто-то делает это за вас

Вы же не думаете, что можно стать альпинистом, просматривая видео, как другие люди лезут в горы? А уж инструктором вас без реального опыта и подавно никто не наймёт. С программированием то же самое.

Шаг 3. Установите библиотеку для написания ботов

Многие советуют пользоваться более сложными библиотеками для чат-ботов. Например aiogram . Она крутая и популярная, но это библиотека для асинхронного кода. Это совсем другой зверь, которого не стоит касаться новичкам. Воспринимайте асинхронные библиотеки как другой язык программирования, хотя бы на старте.

Нужна кнопка Packages

Вместо этого будем работать с куда более простой библиотекой — python-telegram-bot . Откройте меню для установки библиотек слева-снизу:

Нужна кнопка Packages.

Название библиотеки можно скопировать прямо из статьи, не обязательно печатать :)

И в появившемся окошке вбейте её название. Нажмите на «+» напротив названия и подождите загрузки. В конце появится вот такая зелёная плашка об успехе:

Название библиотеки можно скопировать прямо из статьи, не обязательно печатать.

Очень страшно, ничего не понятно, но надо только поменять одно число.

Теперь сложноватый и неприятный момент, но такова разработка, за это нам и платят деньги. Нужно будет поменять версию библиотеки на более дружелюбную для новичков. Для этого нужно зайти в очень недружелюбный файл и подправить число на 13.15 . В общем-то больше ничего делать и не нужно, думаю, вы справитесь:

Очень страшно, ничего не понятно, но надо только поменять одно число.

Шаг 4. Запустите пример из документации

В документации к библиотеке есть готовые примеры кода. Давайте запустим пример эхобота.

Эхобот — это бот, который просто повторяет за вами. Отвечает вам тем же, что вы написали ему. Вот пример в документации. Я почистил его от всякого ненужного, поэтому можете взять сразу мой, он должен быть не таким страшным. Копируйте этот код в файл main.py и жмите кнопку > Run наверху. Ничего не получится, но так и нужно, об этом ниже:

from telegram import Update, ForceReply from telegram.ext import Updater, CommandHandler, MessageHandler, Filters def start(update, context): user = update.effective_user update.message.reply_text(‘Привет!’) def echo(update, context): update.message.reply_text(update.message.text) if __name__ == ‘__main__’: updater = Updater(«TOKEN») dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», start)) dispatcher.add_handler(MessageHandler(Filters.text #128578;

Осталось вставить полученный токен в код и запустить его снова:

Не накосячьте с кавычками. 

Не накосячьте с кавычками.

Заходите в Telegram, открывайте переписку с вашим ботом, и получайте удовольствие от беседы с цифровым другом:

Он всё ещё за мной повторяет :(

Он всё ещё за мной повторяет.

Шаг 6. Начните менять код

В скопированном коде много всего страшного. Давайте коротко расскажу, как это всё работает.

Начинается исполнение кода отсюда:

if __name__ == ‘__main__’: updater = Updater(«5646004689:AAECTkuGjWo1Imwr-_6UrN-nzbo89sd3WSM») dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», start)) dispatcher.add_handler(MessageHandler(Filters.text #128521;

Источник: tproger.ru

Библиотека python-telegram-bot

Для работы с Bot API есть четыре популярные Python-библиотеки:

Поработаем с python-telegram-bot. Это популярная библиотека с удобным интерфейсом: методы классов совпадают с названиями методов Bot API.

В python-telegram-bot все методы Bot API вызываются как методы различных классов библиотеки.

Библиотека разделена на три пакета:

  • telegram — основной пакет, содержит все методы Bot API, перенесённые на Python.
  • telegram.ext — вспомогательный пакет, он содержит методы-обёртки для стандартных методов Bot API, позволяет упростить код и убирает рутинные операции «под капот», примерно так же, как это происходит во фреймворках.
  • telegram.utils — пакет для продвинутой работы с библиотекой, позволяет переопределять и расширять библиотеку.

Пакеты python-telegram-bot импортируются в код под именем telegram (это неожиданно, но это так):

import telegram # Здесь будет код Телеграм-бота
PYTHONimport telegram.ext # Здесь будет код Телеграм-бота

Bot API vs PEP8

В официальной документации Bot API все методы описаны в camelCase, но это не питонично, поэтому разработчики библиотеки python-telegram-bot продублировали названия методов в snake_case.

Это значит, что метод sendMessage может быть вызван двумя способами:

  • telegram.Bot.sendMessage ,
  • telegram.Bot.send_message .

Результат будет одинаков, но лучше соблюдать PEP8 и писать в стиле snake_case.

Библиотека

Для стандартных задач в библиотеке python-telegram-bot есть готовые решения:

  • отправка/получение сообщений;
  • обработка «команд» — сообщений со слешем, вроде /start или /help ;
  • создание кнопок;
  • запись в базу (долговременное хранение сообщений).
Еще по теме:  Боты для захода по ссылкам Телеграм

Решение всех этих задач реализовано на классах.

Создайте новый проект в директории /tg_bot, установите виртуальное окружение и библиотеку python-telegram-bot.

mkdir tg_bot # Создаём директорию cd tg_bot # Переходим в эту директорию python3 -m venv venv # Создаём виртуальное окружение . venv/bin/activate # Активируем виртуальное окружение # Для Windows команда source venv/Scripts/activate pip3 install python-telegram-bot # Устанавливаем библиотеку

Класс Bot()

Этот класс реализует методы API, связанные с отправкой, редактированием, пересылкой или удалением сообщений и прочими активными действиями бота, не связанными с получением и обработкой входящих сообщений. Полная информация о классе Bot() есть в документации.

Например, на основе класса Bot() можно написать бота-администратора, который будет удалять из группового чата сообщения с неприличными словами и отправлять уведомления авторам этих постов.

В начале работы создаётся экземпляр класса Bot() и в него передаётся токен. После этого можно вызывать методы класса:

from telegram import Bot bot = Bot(token=») # Отправка сообщения chat_id = 123456 text = ‘Вам телеграмма!’ bot.send_message(chat_id, text)

Из соображений безопасности токен следует хранить в переменных окружения, но для начала работы поставьте токен прямо в код.

  • подставьте в код chat_id своего аккаунта,
  • подставьте в код свой токен,
  • отправьте сообщение.

Класс Updater()

Этот класс предназначен для получения и обработки входящих сообщений.

При создании объекта класса Updater в него передаётся токен, точно так же, как и в Bot :

from telegram.ext import Updater updater = Updater(token=»)

Экземпляры классов Bot и Updater принимают на вход токен Телеграм-бота и могут делать запросы от имени его аккаунта. Фактически экземпляры классов Bot и Updater — это экземпляры бота.

Обработка входящих сообщений

Сообщения в Telegram делятся на типы: есть простые текстовые сообщения, есть сообщения-картинки, сообщения-стикеры, сообщения-файлы. Каждый тип можно обрабатывать по-разному: например, текстовые сообщения можно парсить и отвечать на них текстовым сообщением, полученные картинки и файлы сохранять или пересылать, а на стикеры отвечать стикерами.

Настроим бота так, чтобы он отправлял приветствие каждый раз, когда получит любое текстовое сообщение. Для этого нам нужно создать обработчик. Такой обработчик создаётся с помощью класса MessageHandler .

Handler — общеупотребимый в программировании термин, он как раз и означает «обработчик».

У объекта Updater есть атрибут dispatcher («диспетчер» или «распределитель»). Именно он распределяет сообщения, которые приходят от пользователей, по разным обработчикам.

Для обработки сообщений:

  1. Посредством диспетчера регистрируется класс-обработчик (для примера выбран обработчик MessageHandler ): updater.dispatcher.add_handler(MessageHandler(. )) .
  2. В обработчик передаются два параметра: updater.dispatcher.add_handler(MessageHandler(Filters.text, say_hi))
    • Filters.text — фильтр, выбирающий из обновлений сообщения определённого типа (в приведённом примере будут выбраны только текстовые сообщения).
    • say_hi() — функция, которая будет обрабатывать выбранные сообщения.В функцию передаются два аргумента:
    • update — это обновление, которое пришло с сервера. В этом объекте есть само сообщение, информация о чате и много других полезных данных.
    • context — в этом объекте хранится информация о боте, а также другая опциональная информация.Эти аргументы передаются неявно: в коде обработчика описывать эти аргументы не нужно, но вызываемая функция должна ожидать их: say_hi(update, context) .
    • С помощью этой функции мы будем отвечать в чат текстом «Привет, я бот». При отправке обязательно нужно указать идентификатор чата chat_id . Его можно получить из объекта update и сохранить, например, в переменную chat .

    from telegram.ext import Updater, Filters, MessageHandler updater = Updater(token=») def say_hi(update, context): # Получаем информацию о чате и сохраняем в переменную chat chat = update.effective_chat # В ответ на любое текстовое сообщение будет отправлен ответ ‘Привет, я бот’ context.bot.send_message(chat_id=chat.id, text=’Привет, я бот’) # Регистрируется обработчик MessageHandler; # из всех полученных сообщений он будет выбирать только текстовые сообщения # и передавать их в функцию say_hi() updater.dispatcher.add_handler(MessageHandler(Filters.text, say_hi)) # Метод start_polling() запускает процесс polling, # приложение начнёт отправлять регулярные запросы для получения обновлений. updater.start_polling()

    Метод start_polling отправляет регулярные запросы к серверу Telegram и проверяет обновления. По умолчанию запросы отправляются каждые 10 секунд. Периодичность опроса можно изменить, передав методу именованный параметр poll_interval и указав нужный интервал запросов (в секундах, float ):

    updater.start_polling(poll_interval=20.0)

    Прервать выполнение программы можно комбинацией клавиш Ctrl + C .

    Класс Filters()

    Класс Filters() может отфильтровывать сообщения по типу:

    • Filters.text ,
    • Filters.photo ,
    • Filters.video .
    • можно фильтровать по ID или имени отправителя, по типу чата (личный чат или канал) или по множеству других признаков.

    Если требуется обработать все сообщения — применяют Filters.all . Документация по фильтрам.

    Обработчики в python-telegram-bot

    В библиотеке python-telegram-bot есть множество готовых обработчиков для разных задач.

    Эти обработчики связывают список отфильтрованных по какому-то признаку сообщений с функцией, которая должна этот список обработать.

    Приведённый в примере обработчик MessageHandler фильтрует полученные сообщения (выбирает только текстовые), сохраняет их в объект Update — и они обрабатываются в функции say_hi() .

    . updater.dispatcher.add_handler(MessageHandler(Filters.text, say_hi)) .

    Чтобы посмотреть, в каком виде полученные сообщения хранятся в объекте Update :

    • отправьте своему боту несколько сообщений;
    • измените код функции say_hi() так, чтобы она вывела на печать объект Update , полученный в первом аргументе;
    • запустите этот код в редакторе.

    MessageHandler — один из самых популярных и универсальных обработчиков в библиотеке, ведь чаще всего работа идёт именно с сообщениями.Обработчик CommandHandler более специализирован: он предназначен для обработки команд — сообщений, начинающихся со слеша / . Самые распространённые команды — /start , /help : скорее всего, вы их уже использовали при общении с ботами.

    CommandHandler выбирает из обновлений сообщения с командами, сохраняет их в объект Update и обрабатывает эти сообщения в функции, указанной вторым аргументом в обработчике.

    from telegram.ext import Updater, CommandHandler updater = Updater(token=») def wake_up(update, context): # В ответ на команду будет отправлено сообщение ‘Спасибо, что включили меня’ chat = update.effective_chat context.bot.send_message(chat_id=chat.id, text=’Спасибо, что включили меня’) # Регистрируется обработчик CommandHandler; # он будет отфильтровывать только сообщения с содержимым ‘/start’ # и передавать их в функцию wake_up() updater.dispatcher.add_handler(CommandHandler(‘start’, wake_up)) updater.start_polling()

    Обработать команды можно и через универсальный MessageHandler, отфильтровав сообщения через Filters , но CommandHandler упростит эту задачу.

    Похожие записи:

    1. Бот в Telegram
    2. Библиотека python-telegram-bot. Пример
    3. Client API в Telegram
    4. Django — доработка шаблона формы регистрации

    Источник: mob25.com

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...