В этой серии статей мы напишем телеграм бота на python. Он работает с внешним API, запрашивает результаты футбольных матчей и выводить их в сообщении.
Когда локальная версия будет готова, разместим бота на сервере. Вместо Heroku, я выбрал отдельную виртуальную машину, что бы бот не засыпал. Это ближе к реальности.
Вся разработка разбита на этапы:
- Локальная установка библиотек и Redis.
- Регистрация и получение токена.
- Настройка , подключение к базам данных.
- Написание основной функциональности бота.
- Регистрации, выбор и настройка внешнего апи футбольных матчей.
- Добавление сбора результатов матчей и интеграция в бота.
- Деплой, публикация на сервере:
- Регистрация дешевого или бесплатного VPS.
- Запуск Редис-клиента.
- Запуск и настройка бота на сервере.
Вводные данные
Материал рассчитан на уровень Начинающий+, нужно понимать как работают классы и функции, знать основы базы данных и async/await. Если знаний мало, крайне желательно писать код в Pycharm, бесплатная версия подходит.
КАК СКОПИРОВАТЬ ТЕЛЕГРАМ БОТА В СЕРВИСЕ KING PROFIT
Используйте указанные версии библиотек, что бы проект работал без изменений. При установке иных версий вы можете получать ошибки, связанные с совместимостью.
Версия Python — 3.8+ aiogram==2.11.2 emoji==1.1.0 redis==3.5.3 ujson==4.0.1 uvloop==0.14.0 # не работает и не требуется на Windows
Локальная установка библиотек для бота и Redis
Для начала нужно создать проект «fonlinebot» с виртуальным окружение. В Pycharm это делается так:
Затем установить библиотеки в виртуальном окружении. Сразу понадобятся 4: для бота, работы с redis, ускорения и emoji в сообщениях.
pip install aiogram==2.11.2 redis==3.5.3 ujson==4.0.1 emoji==1.1.0
Установка Redis локально
Redis — это резидентная база данных (такая, которая хранит записи прямо в оперативной памяти) в виде пар ключ-значение. Чтение и запись в память происходит намного быстрее, чем в случае с дисками, поэтому такой подход отлично подходит для хранения второстепенных данных.
Из недавней статьи — Redis для приложений на Python
Для установки Redis на Linux/Mac следуйте этим инструкциям: https://redis.io/download#from-source-code. Для запуска достаточно ввести src/redis-server .
Что бы установить на Windows скачайте и распакуйте архив отсюда. Для запуска откройте «redis-server.exe».
Теперь нужно убедиться, что все работает. Создайте файл «main.py» в корне проекта и выполните этот код:
# fonlinebot/main.py import redis r = redis.StrictRedis() print(r.ping())
Вывод будет True , в другом случае ошибка.
Регистрация бота и получение токена
Для регистрации напишем https://t.me/botfather команду /newbot . Далее он просит ввести имя и адрес бота. Если данные корректны, выдает токен. Учтите, что адрес должен быть уникальным, нельзя использовать «fonlinebot» снова.
На время разработки сохраним токен в файл. Создайте «config.py» в папке проекта для хранения настроек и запишите токен TOKEN = «ВАШ ТОКЕН»
Настройка бота
Теперь нужно связать бота с redis и базой данных, проверить работоспособность.
Создадим необходимые модули и файлы. В папке «fonlinebot» к созданным ранее «main.py» и «config.py» добавим: «database.py», «requirements.txt» и папку «app». В папку «app» добавьте: «bot.py», «dialogs.py», «service.py». Вот такая структура получится:
Разделив бот на модули, его удобнее поддерживать и дорабатывать.
- «main.py» — для запуска бота.
- «config.py» — хранит настройки, ключи доступов и другую статическую информацию.
- «database.py» — для работы с базой данных и кешем(redis).
- «requirements.txt» — хранит зависимости проекта, для запуска на сервере.
- «app» — папка самого бота.
- «bot.py» — для взаимодействия бота с юзерами, ответы на сообщения.
- «dialogs.py» — все текстовые ответы бота.
- «service.py» — бизнес логика, получение и обработка данных о матчах.
Пришло время перейти к программированию. Запишем в «requirements.txt» наши зависимости:
aiogram==2.11.2 emoji==1.1.0 redis==3.5.3 ujson==4.0.1 uvloop==0.14.0
Так как большая часть программирует на Windows, uvloop мы не устанавливали локально. Установим его на сервере.
В «config.py» к токену добавим данные бота и подключения к redis.
# fonlinebot/config.py import ujson import logging logging.basicConfig(level=logging.INFO) TOKEN = «здесь должен быть токен» BOT_VERSION = 0.1 # База данных хранит выбранные юзером лиги BOT_DB_NAME = «users_leagues» # Тестовые данные поддерживаемых лиг BOT_LEAGUES = < «1»: «Бундеслига», «2»: «Серия А», «3»: «Ла Лига», «4»: «Турецкая Суперлига», «5»: «Чемпионат Нидерландов», «6»: «Про-лига Бельгии», «7»: «Английская Премьер-лига», «8»: «Лига 1», ># Флаги для сообщений, emoji-код BOT_LEAGUE_FLAGS = < «1»: «:Germany:», «2»: «:Italy:», «3»: «:Spain:», «4»: «:Turkey:», «5»: «:Netherlands:», «6»: «:Belgium:», «7»: «:England:», «8»: «:France:», ># Данные redis-клиента REDIS_HOST = ‘localhost’ REDIS_PORT = 6379 # По умолчанию пароля нет. Он будет на сервере REDIS_PASSWORD = None
Информацию о лигах в будущем можно будет вынести в отдельный json файл. Эта версия бота будет поддерживать не более 10 вариантов, я явно их записал.
Добавление базы данных
Теперь добавим классы для работы с базой данных sqlite и redis. База данных нужна для сохранения предпочтений по лигам юзеров.
Юзер будет выбирать 3 чемпионата для отслеживания, бот сохранит их в БД и использует для запроса результатов.
Кеш(redis) будет сохранять результаты матчей, что бы уменьшить количество запросов к API и ускорить время ответов. Как правило, бесплатные API лимитирует запросы.
# fonlinebot/database.py import os import logging import sqlite3 import redis import ujson import config # класс наследуется от redis.StrictRedis class Cache(redis.StrictRedis): def __init__(self, host, port, password, charset=»utf-8″, decode_responses=True): super(Cache, self).__init__(host, port, password=password, charset=charset, decode_responses=decode_responses) logging.info(«Redis start») def jset(self, name, value, ex=0): «»»функция конвертирует python-объект в Json и сохранит»»» r = self.get(name) if r is None: return r return ujson.loads(r) def jget(self, name): «»»функция возвращает Json и конвертирует в python-объект»»» return ujson.loads(self.get(name))
Класс Cache наследуется от StrictRedis . Мы добавляем 2 метода jset , jget для сохранения списков и словарей python в хранилище redis. Изначально он не работает с ними.
Теперь добавим класс, который будет создавать базы данных и выполнять функции CRUD.
# fonlinebot/database.py #. class Database: «»» Класс работы с базой данных «»» def __init__(self, name): self.name = name self._conn = self.connection() logging.info(«Database connection established») def create_db(self): connection = sqlite3.connect(f».db») logging.info(«Database created») cursor = connection.cursor() cursor.execute(»’CREATE TABLE users (id INTEGER PRIMARY KEY, leagues VARCHAR NOT NULL);»’) connection.commit() cursor.close() def connection(self): db_path = os.path.join(os.getcwd(), f».db») if not os.path.exists(db_path): self.create_db() return sqlite3.connect(f».db») def _execute_query(self, query, select=False): cursor = self._conn.cursor() cursor.execute(query) if select: records = cursor.fetchone() cursor.close() return records else: self._conn.commit() cursor.close() async def insert_users(self, user_id: int, leagues: str): insert_query = f»»»INSERT INTO users (id, leagues) VALUES (, «»)»»» self._execute_query(insert_query) logging.info(f»Leagues for user added») async def select_users(self, user_id: int): select_query = f»»»SELECT leagues from leagues where record = self._execute_query(select_query, select=True) return record async def update_users(self, user_id: int, leagues: str): update_query = f»»»Update leagues set leagues = «» where self._execute_query(update_query) logging.info(f»Leagues for user updated») async def delete_users(self, user_id: int): delete_query = f»»»DELETE FROM users WHERE self._execute_query(delete_query) logging.info(f»User deleted»)
Sqlite подходит для тестовых проектов. В будущем потребуется переход на внешнюю базу данных и асинхронная работа. Что бы не переписывать всю логику работы с базой, я сразу добавил асинхронный синтаксис.
Файл базы данных будет создаваться один раз, автоматически. Теперь нужно создать экземпляры классов:
Источник: pythonru.com
Команды для чат-ботов Telegram для настройки и управления
Телеграм давно перестал быть только мессенджером: в нем можно не только общаться, но и создавать чат-ботов. Это особые программы, которые предназначены для автоматического выполнения задач в области обучения, развлечения, маркетинга, продаж и так далее.
Какие функции есть в BotFather
Чтобы приступить к работе, нужно запустить Телеграм и в строке поиска набрать название BotFather. Открыв бот, можно будет увидеть его главную страницу. Здесь предоставлена возможность вести диалог и выполнять необходимые операции для создания бота.
Основные команды
После того, как была открыта главная страница, пользователь получает возможность отправлять боту команды. Для того, чтобы приступить к созданию, необходимо ввести команду /start. На экране появится список основных команд для работы.
Новый способ обучаться в телефоне с помощью бота Телеграм. Можно делать курсы, марафоны, учить сотрудников на автомате и принимать домашние задания. Посмотрите примеры готовых ботов в образовании.
Работа начинается с команды /newbot. Её вводят и нажимают Enter. Далее пользователя просят ввести имя. Если оно не будет соответствовать нужным правилам, система его не примет. После придет код (токен), который пригодиться для дальнейшей разработки.
Его необходимо скопировать и сохранить.
В частности, для организации работы важно наличие следующих:
- Создавая платные услуги, нужно продумать то, как будет выполняться оплата. Для этого должна быть предусмотрена команда /payinbot – оплатить участие.
- Команда /readmore позволит продолжить чтение текста, если он не полностью помещается на экране.
- Для образовательного бота наличие списка лучших учеников позволит мотивировать команду. В этом поможет команда /usertop — ТОП 10 пользователей.
- В каждый момент времени при изучении материала нужно точно знать свой достигнутый уровень. Команда /progress должна быть реализована таким образом, чтобы дать об этом объективную информацию.
- Об общем содержании курсов можно узнать с помощью команды /content — контент / курсы.
- Чтобы попасть в раздел FAQ, можно использовать команду /help.
- Эффективной возможностью для развития платного обучения является наличие партнерской программы. Использование команды /invitefriends (пригласить друзей) может предусматривать выдачу реферальной ссылки для приглашения новых клиентов.
- В процессе работы главное меню является исходной позицией для работы с ботом. Для доступа к нему потребуется соответствующая команда — /mainmenu.
- Команда /balance (баланс) позволит узнать состояние оплаты услуг в любой момент времени.
Эти и другие команды должны соответствовать выбранному алгоритму работы бота.
Команды для редактирования
Основные команды, с помощью которых выполняется редактирование, следующие:
- изменение имени бота /setbot;
- /setdescription позволит создать описание того, как работает и зачем нужен бот, будет отображаться сразу после открытия;
- редактирование краткого описания при помощи /setabouttext;
- картинку или аватар чат-бота можно установить при помощи /setuserpic;
- одна из наиболее важных — /setcommands, позволит определить список собственных команд создаваемого бота;
- команда /delete позволяет прекратить работу и удалить бот.
Создание аккаунта чат-бота Telegram и основные команды
Команды для настройки бота
Чтобы подключить чат-бота к административной панели на сервере и наполнить бота контентом, необходим токен. Он будет идентифицировать бот при дальнейшей работе. Создание кода происходит по команде /token, отзыв токена выполняется с помощью /revoke.
Если автор считает нужным, он может использовать данные геолокации (/setinlinegeo). Настройки для осуществления обратной связи можно установить с помощью /setinlinefeedback. При работе может потребоваться применение online mode, доступное в результате применения команды /setinline.
При настройке работы групп доступна опция запрещения приема в них ботов. Это можно реализовать с помощью /setjoingroups. При общении можно установит режим соблюдения конфиденциальности. Он доступен, если выполнить команду /setprivacy.
Программирование с помощью BotFather дает возможность создать собственного бота для работы с клиентами. Хорошее знание используемых команд, тщательно продуманный алгоритм работы позволят создать автоматически работающую программу для помощи в бизнесе, маркетинге или обучении.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Насколько публикация полезна?
Нажмите на звезду, чтобы оценить!
Средняя оценка 1.8 / 5. Количество оценок: 38
Оценок пока нет. Поставьте оценку первым.
Источник: lessondelivery.com