Как сделать тест в Телеграмм боте на питоне

Некоторые мессенджеры, такие как Telegram, иногда предоставляют API, который можно использовать для создания бота. Боты — это полезная в хозяйстве вещь. Например — хороший способ взаимодействия с приложениями, работающими на вашем домашнем сервере, без заморочек (в плане безопасности) с открытием директорий, проброса и подобной нездоровой фигни. Данный тип ботов легко написать, и они очень универсальны. В этой статье я покажу, как создать бота с помощью Python и Telegram.

Создание бота с помощью Python и Telegram

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

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

Бот состоит из двух частей:

  1. Код для взаимодействия с Selenium WebDriver.
  2. Оповещения об изменениях через Telegram.

Для начала нужно скачать с сайта Selenium WebDriver один драйвер для браузера:

Викторина в телеграм боте | Как провести тест в телеграм боте

Скачать Selenium WebDriver

Затем используем библиотеку Splinter, которая абстрагирует взаимодействие с драйвером.

from splinter import Browser
with Browser ( ) as browser :
browser . visit ( «http://www.google.com» )
# Find and fill out the search form.
browser . find_by_name ( ‘q’ ) . fill ( ‘splinter’ )
# Find and click the ‘search’ button.
button = browser . find_by_name ( ‘btnK’ ) . click ( )
# Check for result on the page.
if browser . is_text_present ( ‘splinter.readthedocs.io’ ) :
print ( «Yes, the official website was found!» )
print ( «No, it wasn’t found. » )

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

Теперь, когда у нас есть скрипт, который мониторит изменения на сайте, нам нужен способ получения уведомлений. Чтобы создать бота Telegram, нам понадобится токен. Для получения токена воспользуемся ботом BotFather.

Создать бот Python Telegram

После отправления команды / newbot , BotFather предложит придумать имя бота, а затем предоставит токен.

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

import telegram
class Telegram :
def __init__ ( self , token : str ) :
self . bot = telegram . Bot ( token = token )
self . offset = 0
def send ( self , chat_id , message ) :
self . bot . send_message ( chat_id = chat_id , text = message )

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

Добавьте бота в группу.

Как создать БОТА-ВИКТОРИНУ с ВОПРОСАМИ и КНОПКАМИ для TELEGRAM на PYTHON 🐍

Ссылка для получения обновлений бота:

https : //api.telegram.org/bot/getUpdates
https : //api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates

Найдите объект chat :

«update_id» : 8393 ,
«message_id» : 3 ,
«first_name» : «AAA»
«date» : 25497 ,
«new_chat_participant» : <
«first_name» : «NAME» ,
«username» : «YOUR_BOT_NAME»

Постинг в канал telegram с помощью python или бот telegram в 3 строчки

Предположим надо написать телеграмм бота, который при появлении свежей новости на сайте пишет в канал. Практическое применение для меня было в том, что на одном сайте изредка появляется важная информация, которую пропускать не хотелось, но и постоянно мониторить сайт тоже. В итоге захотелось написать максимально простой и минималистичный python скрипт, выполнющий задачу постинга в канал telegram и не использующий даже базу данных. Такая простота достигается следующим образом: по крону раз в сутки запускается программа, которая вытягивает все новости за вчерашний день. Непосредственно отправление сообщения в канал занимает 3 строчки, подробнее об этом конце, а сейчас разделим задачу на несколько логических последовательных подзадач:

  1. Отслеживание появления новости
    • 1.1 Запрос html страницы (использование бибиотеки requests)
    • 1.2 Парсинг html страницы (здесь будем использовать питон библиотеку BeautifulSoup)
    • 1.3 разбивка списка новостей на старые и новые публикации
    • Отправка сообщения в телеграм канал
      • 2.1 Создание канала а также бота с помощью BotFather и добавление бота в администраторы канала
      • 2.2 Выбор библиотеки и её инициализация с помощью токена telegram, полученного от все того же BotFather (в нашем случае это библиотека python-telegram-bot )
      • 2.3 Отправка сообщения.
      • Настройка обработчика cron
        • раз в сутки: «1 12 * * * /path/to/bot.py >/dev/null 2>http://zabaykin.ru/?p=443″ target=»_blank»]zabaykin.ru[/mask_link]

          Создание чат-бота с ИИ в Telegram

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

          В данной статье я расскажу, как можно создать такого небольшого чат-бота в Telegram. Он сможет говорить на общие темы: погода, досуг и т.д. В статье будет много ссылок на дополнительные материалы, они позволят более глубоко погрузиться в тему NLP и создания ботов в Telegram. Также в конце я оставлю предложения по усовершенствованию разработанного чат-бота.

          Весь код написан на языке Python.

          Для того, чтобы создать бота в Telegram необходимо написать боту по имени BotFather.

          С помощью BotFather можно создавать новых ботов в Telegram и изменять настройки существующих. Например, добавить описание, установить аватарку для бота.

          После создания чат-бота в BotFather вы получите уникальный токен. Токен нужен для идентификации вашего бота. Не сообщайте его никому.

          2. Написание кода бота

          Для создания чат-ботов в Telegram можете использовать библиотеки python-telegram-bot или pyTelegramBotAPI

          from telegram import Update from telegram.ext import Updater, CommandHandler # Обработка команды start def send_start(update: Update): update.message.reply_text(“Hey, what’s up?”) updater = Updater(“YOUR_BOT_TOKEN”) # Добавление обработчика updater.dispatcher.add_handler(CommandHandler(‘hello’, send_start)) # Запуск бота updater.start_polling() updater.idle()

          Использование библиотеки pyTelegramBotAPI

          Принципиально эти библиотеки ничем друг от друга не отличаются. Отличие связано с синтаксисом.

          В данной статье я использовал библиотеку python-telegram-bot.

          Если речь идёт о чат-боте для сотен людей, то лучше использовать библиотеку aiogram. В отличие от двух предыдущих библиотек aiogram поддерживает ассинхронность. Это позволит обрабатывать сообщения нескольких людей одновременно.

          3. Создание искусственного интеллекта

          NLP (Natural Language Processing) – тема объёмная, тема для ряда статей. В этой статье я расскажу, что использовал и оставлю ссылки на ресурсы с более подробным обзором данной темы.

          a. Набор датасета

          Датасет я составлял вручную. Структура датасета представлена ниже на изображении.

          Интенты – намерения пользователей. Интент включает в себя примеры вопросов, которые задают пользователи. Например, интент Спортивные мероприятия содержит все вопросы (строго говоря, это могут быть и утверждения), связанные со спортивными мероприятиями. Также интент включает в себя ответы чат-бота. Интент может включать один или несколько ответов.

          Если ответов несколько, то ответ бота выбирается случайным образом.

          В Python структура датасета следующая:

          Если знаете, как это сделать проще или где можно найти готовые датасеты, пишите в комментариях.

          b. Предобработка текста

          Были использованы три метода: удаление символов пунктуации, приведение слов к нижнему регистру и лемматизация.

          Для удаления символов пунктуации использовался модуль string.

          import string # Удаление символов пунктуации def remove_punctuation(text): translator = str.maketrans(», », string.punctuation) return text.translate(translator)

          Лемматизация – это процесс приведения слова к нормальной (словарной) форме.

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

          Библиотека pymystem3 — это морфологический анализатор русского текста от компании Яндекс. Он приводит слова к начальной форме и нижнему регистру.

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

          В качестве векторизатора был использован TF-IDF векторизатор.

          Его название — это сокращение от Term frequency-inverse document frequency (частота слова — обратная частота документа).

          Частота слова (Term Frequency) — определяет, как часто выбранное слово появляется в документе (в данном случае, это запросы пользователей).

          Обратная частота документа (Inverse Document Frequency) — снижает веса слов, которые часто встречаются в документах.

          from sklearn.feature_extraction.text import TfidVectorizer vectorizer = TfidVectorizer(analyzer=’char_wb’, ngram_range=(2,3), max_df=0.8) vector = vectorizer.fit_transform(text)

          • analyzer=’char_wb’ – создание n-грамм символов только из текста внутри границ слов;
          • ngram_range=(2,3) – нижняя и верхняя границы диапазона значений для n-грамм;
          • max_df=0.8 — игнорирование терминов, частота которых в запросе строго превышает заданный порог.

          from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, stratify=y)

          Данные делились на обучающую и тестовую выборки. Треть данных отводилась на тесты, остальные часть данных на обучение.

          Параметр stratify задаёт использование стратификации по интентам, это позволяет повысить точность классификации для классов с неравным количеством примеров запросов в датасете.

          Для классификации был использован алгоритм LinearSVC. Метод опорных векторов хорошо показывает себя в многоклассовой классификации.

          from sklearn.svm import LinearSVC # Классификация clf = LinearSVC() clf.fit(X_train, y_train) clf.predict(vector)[0]

          Если ваша модель плохо обучена и часто ошибается в классификации, то можно дополнительно реализовать один из алгоритмов нечёткого поиска. Например, расстояние Левенштейна.

          Также мой совет – добавлять заглушки в бота. Заглушки – это такие фразы как «Извините, не понял вас», «Перефразируйте, пожалуйста.».

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

          e. Запуск чат-бота

          Можно запускать бота и тестировать его.

          Небольшой чат-бот, который сможет поддержать разговор на общие темы, готов.

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

          Логирование – это запись действий программы в отдельном файле. Например, запуск бота, обработка запроса пользователя. Логирование позволяет быстрее находить и исправлять баги в программе.

          • Обработка голосовых сообщений

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

          • Выгрузка бота на сервер

          Чтобы ваш бот отвечал круглосуточно необходимо его запустить на сервере. Для запуска небольшого личного бота отлично подойдёт облачная платформа PythonAnywhere. Бесплатного тарифа будет достаточно.

          Это всё, что я хотел рассказать в данной статье. Надеюсь, вы не зря потратили время. Дерзайте и всё получится!

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

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