Бот для Телеграма отвечает на конкретные слова

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

«Рыба» кода бота

Сразу запишем функции в «bot.py», которые понадобятся. Предварительно удалите test_message :

Это не окончательная версия, я мог что-то упустить. В процессе добавим недостающие.

Каждая функция обернута декоратором, так мы общаемся с Телегармом:

Итак. Пользователь нажимает команду старт, получает приветственное сообщение. В нем мы предлагаем выбрать 3 лиги и мониторить результаты по ним. Получить результаты можно командой или кнопкой меню. Так же мы даем возможность изменить выбранные соревнования или удалить свои данные из бота.

Добавление команд в бота

Изначально команды не настроены. Пользователи могут вводить их, но специально меню нет. Для добавления нужно снова написать https://t.me/botfather команду /setcommands . Выберите своего бота и добавьте этот текст:

Как сделать бота для TELEGRAM на Python? | Бот модератор


start — Запуск и перезапуск бота
help — Возможности бота
online — Результаты матчей

В ответ получите «Success! Command list updated. /help». Теперь можно перейти в своего бота и проверить:

 Добавление команд в бота

Ответы на команды

Взаимодействие с ботом начинается с команды /start . Нужно поприветствовать и предложить следующий шаг. Эта команда будет возвращать текст с клавиатурой. Точно так же работает и /help .

Добавим обработку этих команд в «bot.py», обновите start_handler help_handler :

Я добавил импорт import app.service as s . В этом модуле клавиатура и функция проверки пользователя. start_handler проверяет есть ли пользователь в кеше или базе данных, и отправляет ему соответствующий текст.

Перед отправкой текста для выбора лиг, я сохранил его будущий id. Получил номер последнего сообщения (это сама команда «start») и добавил 2 пункта: +1 за наш ответ на команду и +1 за само сообщения выбора лиг. Зная id сообщения, его можно редактирвать.

Теперь напишем клавиатуру и get_league_ids в модуль «service».

# fonlinebot/app/service.py from aiogram.types import ReplyKeyboardMarkup, KeyboardButton, InlineKeyboardMarkup, InlineKeyboardButton from emoji import emojize from config import BOT_LEAGUES, BOT_LEAGUE_FLAGS from database import cache, database as db from app.dialogs import msg MAIN_KB = ReplyKeyboardMarkup( resize_keyboard=True, one_time_keyboard=True ).row( KeyboardButton(msg.btn_online), KeyboardButton(msg.btn_config) ) async def get_league_ids(user_id: str) -> list: «»»Функция получает id лиг пользователя в базе данных»»» leagues = cache.lrange(f»u», 0, -1) if leagues is None: leagues = await db.select_users(user_id) if leagues is not None: leagues = leagues.split(‘,’) [cache.lpush(f»u», lg_id) for lg_id in leagues] else: return [] return leagues

Ответы на команды

MAIN_KB — основная клавиатура, как на скриншоте выше. Разберем подробнее:

  • ReplyKeyboardMarkup — объект, который создает клавиатуру.
  • Параметр resize_keyboard=True уменьшает ее размер.
  • А с one_time_keyboard=True клавиатура будет скрываться, после использования.
  • .row — метод для группировки кнопок в строку.
  • KeyboardButton(msg.btn_online) и KeyboardButton(msg.btn_config) — кнопки с заданным текстом.
Еще по теме:  Где брать контент для Телеграмм канала здоровье

Осталось только добавить текста сообщений в dialogs. Вставьте этот код в класс Messages .

# fonlinebot/app/dialogs.py # . start_new_user: str = «Привет. Я могу сообщать тебе результаты матчей online.» start_current_user: str = «Привет. С возвращением! » «Используй команды или меню внизу для продолжения.» help: str = «»» Этот бот получает результаты матчей за последние 48 часов. Включая режим LIVE. — Что бы выбрать/изменить лиги нажмите «Настройки». — Для проверки результатов нажмите «Онлайн». Бот создан в учебных целях, для сайта pythonru.com «»»

Выбор, изменение и удаление лиг

Сначала внесем правки в наши вспомогательные модули.

В «dababase» в класс Database добавим новый метод insert_or_update_users .

# fonlinebot/database.py #. async def insert_or_update_users(self, user_id: int, leagues: str): user_leagues = await self.select_users(user_id) if user_leagues is not None: await self.update_users(user_id, leagues) else: await self.insert_users(user_id, leagues) #.

В настройки добавим переменные метрик времени:

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

Как сделать чтобы бот в телеграме отвечал только сообщением с определённым префиксом

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

В этой статье мы рассмотрим способы сделать так, чтобы ваш бот в Телеграме отвечал только на сообщения с определенным префиксом. Давайте начнем!

1. Получение API-ключа бота

Первым шагом является создание бота и получение API-ключа. Для этого откройте Telegram и введите в строку поиска BotFather. БотFather — это официальный бот разработчиков Telegram, через который вы можете создать своего собственного бота.

Найдите бота BotFather и напишите ему сообщение «/newbot». Следуйте инструкциям, введите имя для бота и уникальное имя пользователя, заканчивающееся на «bot». В ответ вы получите API-ключ для вашего бота.

2. Настройка и развертывание бота

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

Возможно, вы захотите использовать готовые библиотеки для разработки Telegram ботов на языках программирования, таких как Python (python-telegram-bot), JavaScript (node-telegram-bot-api) или другие. Эти библиотеки облегчают вам задачу взаимодействия с API Telegram и обработки сообщений от бота.

3. Определение префикса для ответов

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

4. Обработка сообщений и проверка префикса

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

Ниже приведен пример обработки сообщений на Python, используя библиотеку python-telegram-bot:

5. Тестирование бота

После того, как вы настроили обработку сообщений с префиксом, вам следует протестировать своего бота. Напишите ему сообщение с префиксом в начале и убедитесь, что он отвечает только на такие сообщения.

Еще по теме:  Как в Сбербанке онлайн скинуть распечатку расходов по карте через Телеграмм

Если ваш бот отвечает только на сообщения с префиксом, значит, задача выполнена успешно!

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

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

Удачи в создании вашего бота в Телеграме!

Источник: qaa-engineer.ru

Бот дразнилка для telegram

Однажды, в одной группе мессенджера телеграм появился занятный бот, который умел передразнивать фразы «да» и «нет». Если сообщение любого из участников заканчивалось на что-то похожее на «да/нет», он отвечал: «Пакет го*на» или «Го*на пакет» (не будем нецензурщиной осквернять блог). В общем. прикольно.

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

Как все создавалось

На тот момент у Ильи (еще один наш разработчик) уже был опыт написания бота для promurom.ru, он его писал на php. «Php — это не интересно», — подумал я, к тому же давно было желание в изучении nodejs, а тут нескольких зайцев: и прокачка скилов, и развлечение, и новые технологии =) Про написание ботов есть стопицот постов и мануалов, я не буду подробно рассказывать все этапы регистрации и разработки (чего там разрабатывать? 3 строчки кода и 2 библиотеки для nodejs). Самая главная библиотека Telegram Bot API for NodeJS — это обертка над стандартным АПИ телеграма. Для меня очень сложным был процесс понимания как же боты работают, не саму обработку запросов, а именно процесс общения между сервером телеграм и моим сервером. Я себе представлял это так: пользователь шлет команду боту, сообщение уходит на сервер теоеграм, оттуда идет на мой сервер, забирает ответ и отправляет этот ответ в чат (забегая вперед скажу, что так он тоже может, но процесс настройки чуть сложнее). В действительности все оказалось проще, собственно сам бот крутить на сервере и с некоторой периодичностью присасывается к серверу телеграми и слушает не пришло ли ему чего (Long polling) Никаких сложных настроек сервера и протоколов.

За пару часов я накидал частичный аналог старого бота, который реагировал на да/не и еще пару фраз, запулил его на сервере и добавил в офисную группу.

Расширяемый лексикон

Теперь переходим к следующему этапу, наделим бота способностью учиться. Как-то не сразу в моей голове сложилось понимание как реализовать весь процесс и в каком формате хранить данные. Сначала родилось решение «в лоб» завести базу из одной таблицы, состоящей из 2х полей, где будут храниться фразы и ответы а них. Но этот вариант с моими навыками на тот момент показался сложноватым. К тому же идея при каждом запросе дергать базу тоже не внушала оптимизма. В дело вступил коллективный разум, я закинул проблему в общий чат и обсуждение началось. Конечно, буквально за пару десятков фраз мы ушли то основной темы и стали рассуждать как можно еще «улучшить» бота, наделить его ИИ и т.д. Но одна хорошая мысль прозвучала: «Не бойся часто дергать файловую систему, это не так долго (тем более в век ssd), а самое главное — просто». В общем, принял решение, что хранить словарь буду в файле на диске. А потом мне пришло понимание, что я работаю с процессом, который не останавливается, nodejs запускается аки демон и висит в процессах, пока его не убьешь явно. Т.е. при запуске все переменные попадают в память и никуда оттуда не деваются, если, конечно, ты сам их не прибьешь, следовательно, словарь будет все время лежать в ОЗУ, а это самое быстрое что может быть. И так решение: словарь храним на диске, при запуске забираем его в память и работаем из ОЗУ, при расширении словаря пишем на диск обновленный словарь — ПРОФИТ!

Еще по теме:  Что значит загрузить медиафайл в Телеграмме

С форматом хранения не стал долго ломать голову, есть стандартный для js — json (в честь Джейсона Стетема, наверное), вот его и взял за основу, фраза в качестве ключа, а ответ значение:

Потом пришла мысль: «А если будет несколько ответов на одну фразу?». Несколько одинаковых ключей быть не может, поэтому, не мудрствуя лукаво — фраза в качестве ключа, а значения хранить в массиве. И в итоге получаем такую структуру:

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

Что я понял про команды бота для телеграм? Все фразы, которые начинаются со слеша имеют атрибут команда, для чего их регистрировать через папу-бота, мне так и не понятно, может, я что-то не так читал или это проблема обертки для nodejs, но факт остается фактом. Обработку команды /help также пишет сам разработчик, следовательно что он хочет, то и выводит, я думал, что хэлп на уровне сервера работает, и отдает все зарегистрированные команды. Т.е. если бот не приватный, то можно вообще любую фразу интерпретировать как команду. Я создал команду обучения:

/learn_new фраза=ответ

Если формат будет не правильный, бот об этом сообщит. Из недостатков: в качестве фразы может быть только одно слово, бот реагирует только на последнее слово.

Вот как-то так =) Ищите во всех телеграмах страны, бот с именем Draznilka.

1480259650397

Сергей Рыбкин | 21.01.2020

Наш сайт — серебрянный призер Tagline Awards 2019

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

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