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

Содержание

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

Введение

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

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

Платежные системы Telegram

Сейчас мессенджер поддерживает оплату в более чем 200 странах через такие шлюзы, как: Stripe, YooMoney, Sberbank, LiqPay, PayMaster и другие.

Все начинается с установки библиотеки aiogram. Сейчас, пожалуй, это самая популярная библиотека для разработки ботов на Python.

python -m pip install aiogram

Переходим в Telegram и пишем тут BotFather’у команду /newbot. Вводим имя нового бота. Важно, чтобы оно заканчивалось словом Bot.

Как создать бот на футбол самому! Сайт для лайв ставок BetLab

Получаем уникальный токен нового бота. Теперь напишем код простейшего эхо-бота, чтобы проверить его работу.

Связать бота с приложением

Создаем файл config.py и вписываем в него токен, который выдал BotFather. В основном файле main.py прописываем базовый код любого бота.

Обратите внимание на один важный момент: бот должен обрабатывать каждое сообщение с серверов Telegram. Для этого при запуске бота обязательно нужно поставить аргумент skip_updates в значение False. Это спасет от проблем при обработке платежей.

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

Возвращаемся к BotFather’у, даем команду /mybots и выбираем из списка своего бота.

В открывшемся меню кликаем на кнопку «Payments». Из предоставленного списка выбираем нужный платежный шлюз. В качестве теста используем PayMaster. Чтобы подключить оплату в Telegram-бота, сначала нужно выполнить тест, поэтому выбираем «PayMaster Test».

Следуем простым инструкциям бота платежной системы и получаем тестовый токен PayMaster. Его сразу же можно сохранить в config.py.

TOKEN = «5432877141:AAHEwBEb2mwnZX56oaHM10o33ZBZwVkvv-s» PAYMENTS_TOKEN = «1744374395:TEST:f14d9f0d42528b780370»

Возвращаемся к коду бота. Для того, чтобы запросить оплату товаров/услуг, нужно сгенерировать invoice с деталями платежа. Отправить его клиенту и обработать результат.

Подключаем оплату

Указываем список доступных цен на продукты. В качестве цены нужно передать целочисленное значение в минимально возможных единицах валюты. Если речь идет о рублях, то стоимость нужно указывать в копейках. То есть место 500 рублей мы тут укажем 500 * 100 или же 50 000 копеек. В случае с долларами будет почти также, $1=100 центов.

КАК СДЕЛАТЬ БОТ ДЛЯ СТАВОК ЗА 5 МИНУТ В ТЕЛЕГРАМ?

Если предполагается работа с другими валютами, можно использовать currencies.json от Telegram API.

Дальше в коде бота платежной системы мы создаем обработчик команды /buy. Команда будет генерировать и отправлять пользователю invoice платежа. В примере используется оплата месячной подписки.

Сам процесс генерации invoice довольно простой. Не стоит беспокоиться большому количеству аргументов. Это названия продуктов или услуг, описания, цена, валюта и т.п.

Настройки платежей

Обратите внимание на аргумент is_flexible. Его нужно указывать в значение True только в том случае, если финальная стоимость зависит от выбранного способа доставки, если речь идет о продаже какого-то физического продукта.

О других параметрах метода send_invoice вы всегда можете прочитать в официальной документации Telegram API.

Теперь нужно создать еще два обработчика: Pre Checkout Query и Successful Payment.

Pre Checkout Query отвечает за обработку и утверждение платежа перед тем, как пользователь его совершит. Так можно проверить доступность товара на складе или уточнить стоимость.

Важно, что серверам Telegram ответ нужен в течение 10 секунд. Если его не будет, платеж не пройдет.

Successful Payment отвечает за обработку успешно проведенного платежа.

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

Как бот работает на практике

Получив invoice на оплату от бота, нажимаем «Оплатить». Поскольку сначала мы проводим тестирование бота, воспользуемся специальной тестовой картой.

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

Еще по теме:  Как сделать Телеграмм на русском языке Андроид

Теперь возвращаемся в BotFather, чтобы получить реальный токен от выбранного платежного шлюза. Если есть запрос на разные тарифы или способы оплаты, лучше запросить сразу 2-3 токена от разных платежных шлюзов. Далее нужно будет генерировать invoice с помощью токена выбранного провайдера.

Перенос бота на боевой сервер

Чтобы бот работал 24/7 вне зависимости от того, включен компьютер или нет, зальем его на реальный сервер.

Для этого воспользуемся облачным сервером линейки Shared Line от Selectel. Калькулятор панели управления позволяет выбрать гибкую конфигурацию сервера и сразу узнать, сколько будет стоить решение. Все продукты и услуги собраны у провайдера в одном месте, поэтому ими легко управлять. Арендовать сервер можно от 10 ₽/день, а в консоли есть возможность быстро масштабировать вычислительные ресурсы при необходимости.

Регистрируемся и входим в панель управления my.selectel.ru. Переходим в раздел «Облачная платформа» и выбираем «Серверы». Создаем сервер — после этого шага он загорится в списке как «ACTIVE».

Настраиваем конфигурацию. Для примера используем 1 ядро, 512 МБ DDR4 и 5 ГБ на диске.

Теперь переходим к выгрузке бота на боевой сервер. Сначала нужно подключиться к серверу через SSH. Для этого мы можем воспользоваться программой WinSCP для Windows. В Linux и MAC для этого есть свои встроенные инструменты.

Запускаем WinSCP. В качестве имени хоста указываем IP адрес нашего нового сервера. Логин и пароль можно взять во вкладке «Консоль» в панели управления.

Теперь перенесем сюда файлы нашего бота: config.py и main.py. Далее открываем отдельное соединение с сервером по SSH в консоли.

Для этого в WinSCP нажать кнопку и открыть PuTTY. Можно также воспользоваться командной строкой, принципиальной разницы нет.

Настройка бота с Payments 2.0

Подключившись к серверу, нужно выполнить ряд простых действий.

  • Обновить Python до версии 3.10.
  • Установить PIP.
  • Поставить библиотеку Aiogram.

Если оставить все в таком виде, то при закрытии SSH-соединения вместе с ним закроется и процесс бота. Что делать?

Есть несколько способов, как решить этот вопрос. Рассмотрим самый простой – использование команды screen.

Пишем команду screen и жмем Enter. Запускаем бота из обычного терминала и закрываем соединение.

Бот продолжит работу. Чтобы в любой момент вернуться к этому экрану, достаточно ввести команду screen -r $screen_running. На этом деплой в облаке Selectel закончен.

Заключение

Описанная схема запуска Telegram-бота не предел того, как можно настроить прием платежей. К боту всегда можно добавить дополнительные возможности: запрашивать адрес доставки или менять цену в зависимости от адреса.

Идеальное решение для pet-проектов

Сервер для решения задач, которые не требуют полной загрузки vCPU.

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

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

Инструкция

Как автоматизировать подготовку к собеседованиям с помощью Telegram-бота

29 сентября 2023

Инструкция

Как реализовать очередь в Redis

14 сентября 2023

Инструкция

Как генерировать истории с помощью ChatGPT и Telegram

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

Заработок на ставках это не миф! Просто воспользуйтесь ботом в телеграм

Уникальный в своем роде бот в телеграм для заработка на ставках. Бот собирает статистику различных букмекерских организация и выдает арбитражные (вилочные) события. Это значит, что поставив так, как показывает бот вы будете в плюсе при любом исходе события. Средний процент заработка в день + 20% от вашего банка. В боте есть 3х часовой бесплатный доступ.

Убедитесь сами, что на боте можно зарабатывать.

!ВИЛКИ на ставках!

Вы когда-нибудь задумывались о том, чтобы начать зарабатывать на ставках, но боялись прогореть? Вы не одиноки!

Хотели бы попробовать поучаствовать в ставках. Это возможно!

Вилки — дают тебе возможность получить гарантированную прибыль Зарабатывайте без риска!

❗❗Ставки без риска❗❗

Где ты ещё услышишь предложение о заработке на ставках без риска? Это абсолютно реально Просто попробуй нашего бота по вилкам! Вилки беспроигрышный вариант заработка! Мы предлагаем Вам идеальные коэффициенты для прибыли Начни зарабатывать вместе с нами!

❗❗Идеальные коэффициенты только у нас❗❗

Делать ставку и получать постоянную прибыль реально! С нашим ботом ты будешь получать коэффициенты с вилками, которые предоставят тебе возможность выиграть без риска! Попробуй сделать ставку, это ведь так просто Может через пару месяцев ты начнёшь зарабатывать неплохие деньги!️

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

Заработок на ставках — это не «МИФ»

  • Инновационный метод заработка на ставках
  • Проходимость 99.8%
  • Полная замена работы в найме
  • Мгновенный заработок

Что такое вилки и как на них зарабатывать?

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

Еще по теме:  Гет контакт Телеграмм что это

Любите делать ставки?

Бот поможет вам сделать этот процесс удобнее!

Одним нажатием кнопки в боте вы получите:

Матч

  • Вид спорта;
  • Наименование матча;
  • Играющие команды;

Коэффициенты

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

Сумму беспроигрышной ставки

  • Покажет в зависимости от вашего банка сколько и куда ставить, чтобы остаться в плюсе

Почему нужно пользоваться ботом?

  • Не нужно держать в голове формулы и цифры!
  • Все необходимое для заработка в вашем телефоне!
  • Долгожданная финансовая независимость от найма!

Это малая часть отзывов от наших пользователей

Как работает бот?

Бот автоматически собирает информацию и сохраняет на сервере.

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

Вы получаете актуальные данные буквально за пару секунд!

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

Футбольный телеграм бот на Python (1/4): Подготовка и настройка бота

В этой серии статей мы напишем телеграм бота на python. Он работает с внешним API, запрашивает результаты футбольных матчей и выводить их в сообщении.

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

Вся разработка разбита на этапы:

  1. Локальная установка библиотек и Redis.
  2. Регистрация и получение токена.
  3. Настройка , подключение к базам данных.
  4. Написание основной функциональности бота.
  5. Регистрации, выбор и настройка внешнего апи футбольных матчей.
  6. Добавление сбора результатов матчей и интеграция в бота.
  7. Деплой, публикация на сервере:
  1. Регистрация дешевого или бесплатного VPS.
  2. Запуск Редис-клиента.
  3. Запуск и настройка бота на сервере.

Вводные данные

Материал рассчитан на уровень Начинающий+, нужно понимать как работают классы и функции, знать основы базы данных и async/await. Если знаний мало, крайне желательно писать код в Pycharm, бесплатная версия подходит.

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

Версия 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 это делается так:

pycharm new project

Затем установить библиотеки в виртуальном окружении. Сразу понадобятся 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» снова.

Футбольный телеграм бот на Python (1/4): Подготовка и настройка бота

На время разработки сохраним токен в файл. Создайте «config.py» в папке проекта для хранения настроек и запишите токен TOKEN = «ВАШ ТОКЕН»

Настройка бота

Теперь нужно связать бота с redis и базой данных, проверить работоспособность.

Создадим необходимые модули и файлы. В папке «fonlinebot» к созданным ранее «main.py» и «config.py» добавим: «database.py», «requirements.txt» и папку «app». В папку «app» добавьте: «bot.py», «dialogs.py», «service.py». Вот такая структура получится:

Футбольный телеграм бот на Python (1/4): Подготовка и настройка бота

Разделив бот на модули, его удобнее поддерживать и дорабатывать.

  • «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 подходит для тестовых проектов. В будущем потребуется переход на внешнюю базу данных и асинхронная работа. Что бы не переписывать всю логику работы с базой, я сразу добавил асинхронный синтаксис.

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

# fonlinebot/database.py #. # создание объектов cache и database cache = Cache( host=config.REDIS_HOST, port=config.REDIS_PORT, password=config.REDIS_PASSWORD ) database = Database(config.BOT_DB_NAME)

Добавление текстовых сообщений

Для шаблонов сообщений создадим неизменяемый dataclass . Здесь будут все текстовые ответы. А dataclass удобно использовать при вызове аргументов.

Создание бота

В файле «bot.py» создадим бота. Импортируем зависимости, создадим объект бота и первое сообщение.

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

# fonlinebot/app/bot.py # . async def on_shutdown(dp): logging.warning(‘Shutting down..’) # закрытие соединения с БД db._conn.close() logging.warning(«DB Connection closed»)

Первый запуск бота

Для запуска используем файл «main.py». Импортируем бота и настроим пулинг:

# fonlinebot/main.py from aiogram import executor from app import bot executor.start_polling(bot.dp, skip_updates=True, on_shutdown=bot.on_shutdown)

Теперь запустим проект. Если вы в Pycharm, откройте вкладку «Terminal» и введите python main.py . Что бы запустить бота без Pycharm:

Первый запуск бота

  • перейдите в папку проекта,
  • активируйте виртуальное окружение,
  • запустите скрипт ( python main.py ).

Теперь откроем телеграм и проверим.

Первое сообщение боту

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

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

В процессе написания проекта код будем изменяться. Что бы избежать появления новых ошибок после размещения на сервере, нужно сразу написать несколько тестов.

Добавьте модуль «test.py» в папку fonlinebot. На этом этапе достаточно 4 теста, вы можете добавить свои.

# fonlinebot/test.py import unittest import aiohttp from unittest import IsolatedAsyncioTestCase from database import cache, database from app import bot class TestDatabase(IsolatedAsyncioTestCase): async def test_crud(self): await database.insert_users(1111, «1 2 3») self.assertEqual(await database.select_users(1111), (‘1 2 3’,)) await database.delete_users(1111) self.assertEqual(await database.select_users(1111), None) class TestCache(unittest.TestCase): def test_connection(self): self.assertTrue(cache.ping()) def test_response_type(self): cache.setex(«test_type», 10, «Hello») response = cache.get(«test_type») self.assertEqual(type(response), str) class TestBot(IsolatedAsyncioTestCase): async def test_bot_auth(self): bot.bot._session = aiohttp.ClientSession() bot_info = await bot.bot.get_me() await bot.bot._session.close() self.assertEqual(bot_info[«username»], «FonlineBOT») if __name__ == ‘__main__’: unittest.main()

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