Как дать данный Телеграмма

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

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

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

Как сделать кнопку «Поделиться» в Телеграм

Рассказываю о нескольких простых способах, позволяющих сделать кнопку «Поделиться» в Телеграм. Благодаря кнопке пользователи смогут лучше взаимодействовать с контентом вашего канала или чата и быстрее делиться им с другими людьми.

Как сделать кнопку «поделиться» в Телеграм

Введение

Кнопка «Поделиться» в Телеграм присутствует у постов в каналах по умолчанию. Это стрелочка в кружке, расположенная справа у постов.

Как сделать кнопку

Однако она не слишком сильно выделяется и привлекает к себе внимание. Поэтому иногда полезнее создать к посту отдельную кнопку, позволяющую расшарить (от англ. share — поделиться) пользователю контент. Ниже пример такой кнопки.

Кнопка

Теперь разберу 2 способа как сделать кнопку «Поделиться» в Телеграм.

Создаем кнопку «Поделиться» в Телеграм с помощью FleepBot

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

1. Подключаем бот к каналу.

2. Заходим в бот и нажимаем «Создать пост», выбираем нужный канал.

Создаем пост

3. Отправляем боту контент. Я взял картинку с новым курсом. Кликаем по кнопке «Больше настроек».

Создаем кнопку

4. Теперь нажимаем по кнопке «Поделиться». Статус поменяется на «вкл.» А бот пришлет сообщение об успешной активации.

Создаем кнопку

Все, после публикации поста на канале у него появится кнопка «Поделиться».

Создаем кнопку «Поделиться» в Telegram с помощью ботов

Второй способ создания кнопки чуть сложнее, но более универсальный. Для начала нужно создать ссылку для кнопки «Поделиться» в Telegram.

Затем с помощью любого бота для отложенных постов создаем кнопку к посту и на нее зашиваем полученную ссылку.

Предположим мне необходимо выпустить новый пост в канале Уголок админа с кнопкой «Поделиться» снизу. Чтобы пользователи лучше расшаривали контент. FleepBot я не использую, как быть:

1. Иду в канал и кликаю правой кнопкой мыши (пк версия Тг) на последний пост, затем выбираю «Копировать ссылку на сообщение».

Создаем кнопку

2. Получаю ссылку на сообщение, вот она: https://t.me/tg_adminpro/210. На конце стоит цифра 210. Что это? Это номер поста в канале.

Все посты в Телеграм-каналах выходят по порядку. Раз мне нужно создать кнопку «Поделиться» для нового поста, которого еще нет в канале, я меняю цифру на 211. Раз последний пост в канале под номером 210, то следующий за ним будет 211. Итак, вот ссылка для будущего поста: https://t.me/tg_adminpro/211.

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

5. Отправляю боту контент для нового поста и добавляю кнопку.

Отправляем боту контент для нового поста, и добавляем кнопку

6. Все готово, ставлю пост в отложку. Когда он выйдет, у него будет рабочая кнопка «Поделиться».

Готовый пост с кнопкой

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

Заключение

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

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

Успехов вам! До новых встреч в следующих статьях. С уважением, Дмитрий Толстой.

Источник: blogger-tolstoy.ru

Телеграм: Вы не можете отправлять сообщения в публичные группы.

В данный момент вы не можете отправлять сообщения в публичные группы

Что делать если в Телеграме пишет: В данный момент вы не можете отправлять сообщения в публичные группы. Что это значит? Давайте вместе разберемся в этом вопросе.

Уведомление

Некоторые пользователи столкнулись с ошибкой. В Telegram выходит уведомление со следующим текстом:

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

Что это?

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

Далее эту жалобу рассмотрела техподдержка Телеграма и дала вам бан на сутки.

Если нажать на сообщение “Больше информации”, то там будет подробно написано, за что дали бан и на какое время.

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

Ограничения

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

  • нельзя писать в публичные чаты;
  • нельзя писать незнакомцам;
  • но если незнакомцы напишут в ЛС вам, то вы сможете ответить.

Время

  1. Первый бан дается на сутки.
  2. Если от кого-то поступила вторая жалоба на вас, то второй раз бан дается на 3 дня.
  3. Следующий на неделю.
  4. Еще один на год.
  5. Далее может быть навсегда.

Разбан

Как получить разбан? При таком уведомлении раньше разбан получить никак нельзя. Нужно выждать то время, которое написано.

Сорви овации

Будьте самыми стильными! Используйте суперэффекты:

  1. Фильтры и маски для ТикТока.
  2. Бьюти приложения для видео.
  3. Красивые шрифты.
  4. Видеоредакторы.
  5. Убрать предмет с фото.
  6. Flat Lay раскладка.
  7. Оживить фото.
  8. Соединить 2 фото в 1 лицо.
  9. Акварельные мазки.
  10. Надпись в круге на фото.
  11. Изменить цвет предмета на фото.
  12. Топ-20 лучших фильтров VSCO.
  13. Рамки (большая коллекция).
  14. Двойная экспозиция.
  15. Снимки в стиле Полароид.

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

лайфхаки для фото красивая обработка фото

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

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

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