network work
Light Weight
- Депозит
- $0
Автор network work
Источник https://xss.is
Всем доброго дня друзья , в этой статье я напишу про создание ботов в тг , начнем с простого закончим более трудным .
Начнем с простого , почему именно python ? Какие возможности этого языка ?
Все просто - телеграмм боты можно писать на таких языках как JS ,php,go(golang) и другие .Но почему именно python ,питон отличается простотой и читаемостью кода , множество разных библиотек имеется ,а так же нельзя забывать про хорошую документацию .python сам по себе простой язык но как не странно полезный , если говорить касательно тг то python дает возможность быстро написать и протестировать бота без лишнего геморроя .
Спойлер: полный код бота
Python: Скопировать в буфер обмена
Давайте разберем код
Python: Скопировать в буфер обмена
- импортируем модуль который отвечает за логи .Данный модуль дает возможность отслеживать работу бота ( что большой плюс для мониторинга )
Python: Скопировать в буфер обмена
- импортируем модуль который отвечает за выполнение http запросов ( она нам нужна будет для получение самих данных о курсах криптовалюты )
Python: Скопировать в буфер обмена
- импортируем основные классы aiogram , давай разберем каждый .
Bot - класс который отвечает за взаимодействия с телеграммом
Dispatcher - класс отвечает за обратботкой и управлением входящих сообщений
types - модуль который может содержать различные типы данных
Python: Скопировать в буфер обмена
- строчка импортирует "ParseMode" которая нужна для указания стиля текста при отправке сообщений юзеру
Python: Скопировать в буфер обмена
- в данном случаи мы импортируем "executor" , который нужен для запуска бота и принципе для обработки входящих сообщений
Python: Скопировать в буфер обмена
- сюда вводим апи нашего бота
Спойлер: где получить api бота
Кто не знает как получить апи бота то
1. находим бота BotFather
2.прописываем /newbot для создание нового бота (затем следуйте инструкции )
Python: Скопировать в буфер обмена
- api_saita хранит url которая в свою очередь отвечает за получение актуальных цен на нашу крипту .
Python: Скопировать в буфер обмена
- строчка настраивает можно сказать базовую конфигурацию для мониторинга бота .Для этого мы и прописали "import logging"
Python: Скопировать в буфер обмена
- строчка можно сказать создает экземпляр "Bot" , используя токен нашего бота .Зачем же это строчка нужна ? Все просто , она дает возможность для взаимодействия с telegram api
Python: Скопировать в буфер обмена
- строчка создает экземпляр "Dispatcher" который в свою очередь отвечает за управлением и обработкой сообщений.
Python: Скопировать в буфер обмена
- строчка определяет асинхронную функцию "get_crypto_price" которая в свою очередь возвращает строчку с ценами на крипту
Python: Скопировать в буфер обмена
- строчка отвечает за выполнение http запроса к API ( для получение цен на криптовалюты)
Python: Скопировать в буфер обмена
- строчка преобразует ответ api (в формате json) в python словарь. Зачем же спросите вы ? Конвертация json ответа в python словарь дает возможность удобнее и эффективнее работать с данными от api. json формат - это текстовый формат , которой не предназначен для работы в коде .Что нельзя сказать о python словаре , который позволяет легко извлекать и управлять данными
Python: Скопировать в буфер обмена
- строчка создает пустой список который будет служить для хранение строк с ценами крипты
Python: Скопировать в буфер обмена
- можно сказать перебирает каждую крипту в полученных данных
Python: Скопировать в буфер обмена
-строчка настраивает можно сказать строку с названием крипты и ее ценной , а так же добавляет ее в выше созданный нами список .Мы использовали метод capitalize() для конвертации первой буквы в верхний регистр , а так же строчка форматирует цену с двумя знаками после запятой
Python: Скопировать в буфер обмена
- строчка преобразует список строк ("price") в одну строку , а так же она разделяет все элементы новой строкой
Python: Скопировать в буфер обмена
- если простыми словами то строчка отвечает за обработку сообщения "/start" . А значит бот будет работать при получение команды "/start" от юзера
Python: Скопировать в буфер обмена
- определят функцию "send_welcome" которая принимает сообщение "message"
Python: Скопировать в буфер обмена
- строчка вызывает асинхронную функцию "get_crypto_price" которая в свою очередь отвечает за получения актуальных цен на крипту
Python: Скопировать в буфер обмена
- строчка отвечает за форматирование строки приветствия с актуальными ценами на крипту
Python: Скопировать в буфер обмена
- отправляет сообщение юзеру ("response_message") + использует формат Markdown
Python: Скопировать в буфер обмена
- строчка проверяет выполняется ли скрипт напрямую ( а не импортируется как модуль )
Python: Скопировать в буфер обмена
- строчка можно сказать запускает цикл обработки входящих сообщений и событий . А так же устанавливает "skip_updates=True", чтобы игнорировать старые сообщения
Первый скрипт был для отслеживания актуальной цены на крипту , скрипт простенький .Давайте сейчас разберем более полезный и сложный код , а точнее напишем инфо бота + добавим базовую админ панель ( рассылка + статистика )
Спойлер: сам код
Python: Скопировать в буфер обмена
Давайте разберем выше написанный код
Python: Скопировать в буфер обмена
- импортируем модуль для логирование и мониторинга
Python: Скопировать в буфер обмена
- импортируем базовые компоненты библиотеки "aiogram" .
Python: Скопировать в буфер обмена
- импортируем "ParseMode" которая предназначена для указания формата сообщений
Python: Скопировать в буфер обмена
- строчка импортирует "executor" ,который предназначен для помощи запуска бота и управление процессом можно сказать
Python: Скопировать в буфер обмена
- сюда вводим токен вашего бота (как его получить написал вверху)
Python: Скопировать в буфер обмена
- заменяем 123456789 на id юзера которого хотите сделать админом .id можно узнать тут https://t.me/getmyid_bot ( не реклама)
Python: Скопировать в буфер обмена
- в этой строчке мы настроили базовые параметры логирование
Python: Скопировать в буфер обмена
- строчка создает обьек бота , используя токен (указанный выше)
Python: Скопировать в буфер обмена
- строчка отвечает за создание объекта диспетчера ,который в свою очередь управляет обработкой сообщений и т.п
Python: Скопировать в буфер обмена
- создаем словарь для хранения информации о пользователях ("user_data") , "user" хранит общее кол-во юзеров .А "user_adm" хранит id юзеров которые будут иметь доступ к админ панели
Python: Скопировать в буфер обмена
- строчка обрабатывает команды ( в данном случаи команду /start
Python: Скопировать в буфер обмена
- асинхронная функция которая отвечает за обработки команды "/start"
Python: Скопировать в буфер обмена
- строчка получает id пользователя (который отправил сообщение )
Python: Скопировать в буфер обмена
- строчка увеличивает число общих юзеров
Python: Скопировать в буфер обмена
- добавляет id пользователя в админ панель
Python: Скопировать в буфер обмена
- создаем сообщение для пользователя ( в данном случаи мы написали приветствие и список активных команд)
Python: Скопировать в буфер обмена
- строчка отправляет ответ пользователю ("response_message")
Python: Скопировать в буфер обмена
- строчка создана для обработки команды "/info"
Python: Скопировать в буфер обмена
- Асинхронная функция для обработки команды "/info"
Python: Скопировать в буфер обмена
- формирует сообщение с указанной нами информацией о боте
Python: Скопировать в буфер обмена
- отправляет выше написанное нами сообщение пользователю
Python: Скопировать в буфер обмена
- строчка обрабатывает команду "/admin"
Python: Скопировать в буфер обмена
- Асинхронная функция для обработки команды "/admin"
Python: Скопировать в буфер обмена
- строчка отвечает за проверку пользователя на наличии доступа к админ панели
Python: Скопировать в буфер обмена
- если не имеет пользователь доступ к админ панели то бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
- строчка формирует выше написанное сообщение (данный текст для юзеров у которых есть доступ к админ панели)
Python: Скопировать в буфер обмена
- строчка отправляет выше написанное сообщение юзерам у которых есть доступ к админ панели
Python: Скопировать в буфер обмена
- строчка будет обрабатывать команду "/rasilka"
Python: Скопировать в буфер обмена
- Асинхронная функция для обработки команды "/rasilka"
Python: Скопировать в буфер обмена
- строчка отвечает за проверку юзеров на права доступа к админ панели
Python: Скопировать в буфер обмена
- если у юзера нету доступа к админ панели , то бот отправляет вышенаписанное сообщение
Python: Скопировать в буфер обмена
- строчка отвечает за получение текста сообщение для рассылки
Python: Скопировать в буфер обмена
- данный кусочек кода отвечает за проверку был ли передан текст сообщения .Если нет , отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- счетчик для отслеживание успешных отправок сообщений
Python: Скопировать в буфер обмена
- счетчик для отслеживание неуспешных попыток отправки сообщений
Python: Скопировать в буфер обмена
- Итперация по всем пользователям с правами администратора.
Python: Скопировать в буфер обмена
- кусочек кода отвечает за отправку сообщения каждому пользователю
Python: Скопировать в буфер обмена
-данный кусок кода отвечает за отправление сообщение если что то пошло не так
Python: Скопировать в буфер обмена
- строчка отправляет сообщение с результатом рассылки(показывает сколько было отправлено успешных/не успешных сообщений
Python: Скопировать в буфер обмена
- строчка отвечает за обработку команды "/stata"
Python: Скопировать в буфер обмена
- Асинхронная функция для обработки команды "/stata"
Python: Скопировать в буфер обмена
- кусок кода отвечает за проверку прав доступка к админ панели , если нету то выводит выше написанное сообщение
Python: Скопировать в буфер обмена
- строчки формируют сообщение с статистикой пользователей
Python: Скопировать в буфер обмена
- отправка собственно сообщение со статистикой пользователю (админу)
Python: Скопировать в буфер обмена
- строчка проверяет скрипт на выполнение как основной модуль , а не импортированный
Python: Скопировать в буфер обмена
- строчка отвечает за скип всех накопленных команд до запуска бота
Вот скрины что мы получим в конце
Давайте сейчас разберем бота автоответчика , то есть пользователю смогу отправлять сообщение боту . А тот в свою очередь будет отправлять все админу, так же добавим функцию отправка сообщения со стороны админа пользователю .Мы до этого писали на библиотеке aiogram , сейчас попрактикуемся на библиотеке telebot.
Спойлер: код
Python: Скопировать в буфер обмена
начнем разбор кода !!!!
import telebot - импортируем библиотеку "telebot" .Данная библиотека используется для создание работы с телеграмм ботами, она намного упрощает взаимодействие с телеграмм api . Но по сравнению с aiogram по моему telebot чутка но отстает
Python: Скопировать в буфер обмена
- сюда вводим токен нашего бота
Python: Скопировать в буфер обмена
- вместо 12345 вводим свой id
Python: Скопировать в буфер обмена
- создаем можно сказать экземпляр бота с помощью токена , который в свою очередь передается "telebot.TeleBot"
Python: Скопировать в буфер обмена
- строчка будет обрабатывать сообщение с командой "/start"
Python: Скопировать в буфер обмена
- строчка отвечает за определение функции сообщения можно сказать
Python: Скопировать в буфер обмена
- строчка проверяет соответствует ли id юзера на наличие доступа к админке
Python: Скопировать в буфер обмена
- если юзер прошел проверку и имеет доступ к админ панели то бот е го приветствует
Python: Скопировать в буфер обмена
- если юзер не является администратором то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- строчка обрабатывает команду "/help"
Python: Скопировать в буфер обмена
- можно сказать это функция обработки команды "/help"
Python: Скопировать в буфер обмена
- данное сообщение бот отправляет если человек прописал команду "/help"
Python: Скопировать в буфер обмена
- строчка обрабатывает команду "/info"
Python: Скопировать в буфер обмена
- функция для обработки команды "/info"
Python: Скопировать в буфер обмена
- если человек прописал команду "/info" то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- обработчик команды "/reply"
Python: Скопировать в буфер обмена
- Функция для обработки команды "/reply"
Python: Скопировать в буфер обмена
- проверяет имеет ли юзер доступ к админ панели
Python: Скопировать в буфер обмена
- строчка отвечает за разделение текста сообщение , "maxsplit=2", позволяет разбить текст на три части(максимум)
Python: Скопировать в буфер обмена
- строчка отвечает за проверку достатка количество символов
Python: Скопировать в буфер обмена
- бот отправляет выше написанное сообщение если админ хочет отправить сообщение юзеру
Python: Скопировать в буфер обмена
- Преобразование второго аргумента в целое число, представляющее ID пользователя.
Python: Скопировать в буфер обмена
- текст ответа
Python: Скопировать в буфер обмена
- строчка отправляет сообщение пользователю по указанному выше id
Python: Скопировать в буфер обмена
- если отправка сообщение закончилась успехом то бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
- можно сказать строчка обработает ошибку в случае неверного id
bot.send_message(message.chat.id, "Неверный формат ID. Убедитесь, что это число.")[/CODE] - бот отправит выше написанное сообщение если юзер с таким ид не зарегистрирован в боте
Python: Скопировать в буфер обмена
- если юзер не имеет доступ к админ панели то бот покажет выше написанное сообщение
Python: Скопировать в буфер обмена
- можно сказать это обработчик сообщений , которые не являются ответами или не содержит команду "/start"
Python: Скопировать в буфер обмена
- можно сказать это функция для обработки сообщений
Python: Скопировать в буфер обмена
- данный кусок кода отвечает за отправку сообщение от юзера к админу в нужном нам формате
Python: Скопировать в буфер обмена
- строчка пересылает сообщение юзера админу
Python: Скопировать в буфер обмена
- сама отправка сообщения от юзера к админу
Python: Скопировать в буфер обмена
- если все прошло успешно то бот отправит выше написанное сообщение юзеру
Python: Скопировать в буфер обмена
- строчка отвечает за обработку сообщений , которые являются ответами на другие сообщения
Python: Скопировать в буфер обмена
- сама функция для обработки ответов
Python: Скопировать в буфер обмена
- строчка проверяет отправителя сообщение на наличие доступа к админ панельки
Python: Скопировать в буфер обмена
- строчка проверяет исходное сообщение ( если простыми словами ,то строчка проверяет есть ли отправитель у сообщения )
Python: Скопировать в буфер обмена
- строчка отправляет ответ
Python: Скопировать в буфер обмена
- если человек ответил на сообщение то бот его предупреждает что это может делать только админ
Python: Скопировать в буфер обмена
- строчка будет обрабатывать сообщение где есть фотка
Python: Скопировать в буфер обмена
- данная функция нужна для обработки фотографий
Python: Скопировать в буфер обмена
- кусочек кода отвечает за формирования текста сообщение администратору
Python: Скопировать в буфер обмена
- строчка отправляет (пересылает ) фотографию админу
Python: Скопировать в буфер обмена
- если все прошло успешно то бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
- данная строчка будет обрабатывать сообщения содержащих какие либо документы (файлы)
Python: Скопировать в буфер обмена
- сама функция для обработки документов (файлов)
Python: Скопировать в буфер обмена
- кусок кода формирует сообщение для отправления администратору
Python: Скопировать в буфер обмена
- строчка пересылает документы администратору
Python: Скопировать в буфер обмена
- сама отправка сообщение админу
Python: Скопировать в буфер обмена
- если все прошло успешно бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
- строчка обрабатывает голосовые сообщения
Python: Скопировать в буфер обмена
- сама функция для обработки голосовых сообщений
Python: Скопировать в буфер обмена
- кусок кода формирует сообщение с информацией по выше указанному принципу
Python: Скопировать в буфер обмена
- пересылка голосового сообщения админу
Python: Скопировать в буфер обмена
- сама отправка голосового сообщение админу
Python: Скопировать в буфер обмена
- если все прошло успешно то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- можно сказать это проверка что скрипт запускается напрямую а не импортируется как модуль
Python: Скопировать в буфер обмена
- сообщение показывает успешный запуск бота
Python: Скопировать в буфер обмена
- Метод "polling" позволяет боту получать обновления от Telegram и обрабатывать их. Параметр "none_stop=True" указывает, что бот должен продолжать работу в случае возникновения ошибок.
Вот что у нас получилось
Спойлер: скрин
Давайте напишем последний для этой статьи бот , который будет показывать самые новые новости по команде /news .Мы напишем все на telebote , я напишу отдельную статью по aiogram .
Python: Скопировать в буфер обмена
Начнем разбор самого кода !
Python: Скопировать в буфер обмена
- строчка импортирует библиотеку "pyTelegramBotAPI" для дальнейшей работы
Python: Скопировать в буфер обмена
- импортируем библиотеку которая нужна для работы http запросами
Python: Скопировать в буфер обмена
- сюда вводим наш телеграмм токен
Python: Скопировать в буфер обмена
- сюда вводим наш апи ключ ( его можно взять тут https://newsapi.org/account(не реклама ))
Python: Скопировать в буфер обмена
- можно сказать строчка создает новый объект используя токен .Это нужно для взаимодействия с телеграмм api
Python: Скопировать в буфер обмена
- создаем url запрос для получение новостей . а так же используем "country=ru" для получение российских новостей а "apiKey={NEWS_API_KEY}" нужен для авторизации
Python: Скопировать в буфер обмена
- Выполняем GET-запрос к API новостей
Python: Скопировать в буфер обмена
- строчка проверяет успешен ли наш запрос
Python: Скопировать в буфер обмена
- получает данные ответа в формате JSON
Python: Скопировать в буфер обмена
- строчка извлекает список статей из ответа .А если "articles" отсутствует ,то возвращаем список но уже пустым
Python: Скопировать в буфер обмена
- проверка на наличии статей в списке
Python: Скопировать в буфер обмена
- строчка создает пустой список (для хранение новостей)
Python: Скопировать в буфер обмена
- перебираем первые 5 статей ( кол во статей можете изменить )
Python: Скопировать в буфер обмена
- строчка получает заголовок статьи , если его нет то пишет об этом
Python: Скопировать в буфер обмена
- получаем url статьи , если url нету то пишет об этом
Python: Скопировать в буфер обмена
- строчка добавляет заголовок и url самой статьи в список
Python: Скопировать в буфер обмена
- строчка формирует строку с новостями
Python: Скопировать в буфер обмена
- если новостей новых нету то от отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- если запрос по какой-то ошибки не удался то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
- строчка выполняет функцию обработки команды "/start"
Python: Скопировать в буфер обмена
- если юзер успешно запустил бота то бот отправляет вышенаписанное сообщение
Python: Скопировать в буфер обмена
- строчка отвечает за обработку команды "/news"
Python: Скопировать в буфер обмена
- сама функция обработки команды "/news"
Python: Скопировать в буфер обмена
- при помощи "get_latest_news" получаем последние новости
Python: Скопировать в буфер обмена
- отправляем готовый результат пользователю
Python: Скопировать в буфер обмена
- строчка проверяет скрипт что он выполняется напрямую а не через импорт
Python: Скопировать в буфер обмена
- если все успешно получилось то в консоли можно увидеть такой текст
Вот что мы получаем на выходе
Спойлер: скрин
Этот код позволяет создать бота в телеграмм , который в свою очередь отвечает за свежие новости с региона РФ по команду /news . Скрипт работает по по апи , да и принципе я добавил данный скрипт для усвоение работы с апи
Давайте подведем итоги данной статьи .Мы разобрали пару скриптов на telebote а так же на библиотеке aiogram, мы начали изучение с простого и закончили более сложным.А так же рассмотрели работу телеграмм ботов по апи , надеюсь статьи была интересной .Назовите мне тематику на которую мне стоит написать статью ( я обязательно напишу если это будет в моих силах ) .Удачного дня всем
Источник https://xss.is
Всем доброго дня друзья , в этой статье я напишу про создание ботов в тг , начнем с простого закончим более трудным .
Начнем с простого , почему именно python ? Какие возможности этого языка ?
Все просто - телеграмм боты можно писать на таких языках как JS ,php,go(golang) и другие .Но почему именно python ,питон отличается простотой и читаемостью кода , множество разных библиотек имеется ,а так же нельзя забывать про хорошую документацию .python сам по себе простой язык но как не странно полезный , если говорить касательно тг то python дает возможность быстро написать и протестировать бота без лишнего геморроя .
Практическая часть
Давайте начнем с простого телеграмм бота который при запуске будет показывать актуальный курс крипто валюту , пусть будет биток ,эфир и лайт коин. Начнем!!!Спойлер: полный код бота
Python: Скопировать в буфер обмена
Code:
import logging
import requests
from aiogram import Bot, Dispatcher, types
from aiogram.types import ParseMode
from aiogram.utils import executor
api_bota = '6672409243:AAHfoFHqaFGpOpkbjHAgGRPALz_ZqxTZmng'
api_saita = 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,litecoin&vs_currencies=usd'
logging.basicConfig(level=logging.INFO)
bot = Bot(token=api_bota)
dp = Dispatcher(bot)
async def get_crypto_price() -> str:
response = requests.get(api_saita)
data = response.json()
price = []
for crypto in data:
price.append(f"{crypto.capitalize()}: ${data[crypto]['usd']:.2f}")
return "\n".join(price)
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
crypto_price = await get_crypto_price()
response_message = f"Здравствуйте ,Курсы криптовалют на данный момент \n{crypto_price}"
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Давайте разберем код
Python: Скопировать в буфер обмена
import logging
- импортируем модуль который отвечает за логи .Данный модуль дает возможность отслеживать работу бота ( что большой плюс для мониторинга )
Python: Скопировать в буфер обмена
import requests
- импортируем модуль который отвечает за выполнение http запросов ( она нам нужна будет для получение самих данных о курсах криптовалюты )
Python: Скопировать в буфер обмена
from aiogram import Bot, Dispatcher, types
- импортируем основные классы aiogram , давай разберем каждый .
Bot - класс который отвечает за взаимодействия с телеграммом
Dispatcher - класс отвечает за обратботкой и управлением входящих сообщений
types - модуль который может содержать различные типы данных
Python: Скопировать в буфер обмена
from aiogram.types import ParseMode
- строчка импортирует "ParseMode" которая нужна для указания стиля текста при отправке сообщений юзеру
Python: Скопировать в буфер обмена
from aiogram.utils import executor
- в данном случаи мы импортируем "executor" , который нужен для запуска бота и принципе для обработки входящих сообщений
Python: Скопировать в буфер обмена
api_bota = ' '
- сюда вводим апи нашего бота
Спойлер: где получить api бота
Кто не знает как получить апи бота то
1. находим бота BotFather
2.прописываем /newbot для создание нового бота (затем следуйте инструкции )
Python: Скопировать в буфер обмена
api_saita = 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum,litecoin&vs_currencies=usd'
- api_saita хранит url которая в свою очередь отвечает за получение актуальных цен на нашу крипту .
Python: Скопировать в буфер обмена
logging.basicConfig(level=logging.INFO)
- строчка настраивает можно сказать базовую конфигурацию для мониторинга бота .Для этого мы и прописали "import logging"
Python: Скопировать в буфер обмена
bot = Bot(token=api_bota)
- строчка можно сказать создает экземпляр "Bot" , используя токен нашего бота .Зачем же это строчка нужна ? Все просто , она дает возможность для взаимодействия с telegram api
Python: Скопировать в буфер обмена
dp = Dispatcher(bot)
- строчка создает экземпляр "Dispatcher" который в свою очередь отвечает за управлением и обработкой сообщений.
Python: Скопировать в буфер обмена
async def get_crypto_price() -> str:
- строчка определяет асинхронную функцию "get_crypto_price" которая в свою очередь возвращает строчку с ценами на крипту
Python: Скопировать в буфер обмена
response = requests.get(api_saita)
- строчка отвечает за выполнение http запроса к API ( для получение цен на криптовалюты)
Python: Скопировать в буфер обмена
data = response.json()
- строчка преобразует ответ api (в формате json) в python словарь. Зачем же спросите вы ? Конвертация json ответа в python словарь дает возможность удобнее и эффективнее работать с данными от api. json формат - это текстовый формат , которой не предназначен для работы в коде .Что нельзя сказать о python словаре , который позволяет легко извлекать и управлять данными
Python: Скопировать в буфер обмена
price = []
- строчка создает пустой список который будет служить для хранение строк с ценами крипты
Python: Скопировать в буфер обмена
for crypto in data:
- можно сказать перебирает каждую крипту в полученных данных
Python: Скопировать в буфер обмена
price.append(f"{crypto.capitalize()}: ${data[crypto]['usd']:.2f}")
-строчка настраивает можно сказать строку с названием крипты и ее ценной , а так же добавляет ее в выше созданный нами список .Мы использовали метод capitalize() для конвертации первой буквы в верхний регистр , а так же строчка форматирует цену с двумя знаками после запятой
Python: Скопировать в буфер обмена
return "\n".join(price)
- строчка преобразует список строк ("price") в одну строку , а так же она разделяет все элементы новой строкой
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['start'])
- если простыми словами то строчка отвечает за обработку сообщения "/start" . А значит бот будет работать при получение команды "/start" от юзера
Python: Скопировать в буфер обмена
async def send_welcome(message: types.Message):
- определят функцию "send_welcome" которая принимает сообщение "message"
Python: Скопировать в буфер обмена
crypto_price = await get_crypto_price()
- строчка вызывает асинхронную функцию "get_crypto_price" которая в свою очередь отвечает за получения актуальных цен на крипту
Python: Скопировать в буфер обмена
response_message = f"Здравствуйте ,Курсы криптовалют на данный момент \n{crypto_price}"
- строчка отвечает за форматирование строки приветствия с актуальными ценами на крипту
Python: Скопировать в буфер обмена
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
- отправляет сообщение юзеру ("response_message") + использует формат Markdown
Python: Скопировать в буфер обмена
if __name__ == '__main__':
- строчка проверяет выполняется ли скрипт напрямую ( а не импортируется как модуль )
Python: Скопировать в буфер обмена
executor.start_polling(dp, skip_updates=True)
- строчка можно сказать запускает цикл обработки входящих сообщений и событий . А так же устанавливает "skip_updates=True", чтобы игнорировать старые сообщения
Первый скрипт был для отслеживания актуальной цены на крипту , скрипт простенький .Давайте сейчас разберем более полезный и сложный код , а точнее напишем инфо бота + добавим базовую админ панель ( рассылка + статистика )
Спойлер: сам код
Python: Скопировать в буфер обмена
Code:
import logging
from aiogram import Bot, Dispatcher, types
from aiogram.types import ParseMode
from aiogram.utils import executor
API_TOKEN = ''
ADMIN_ID = 12345789
logging.basicConfig(level=logging.INFO)
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
user_data = {
"user": 0,
"user_adm": set()
}
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
user_id = message.from_user.id
user_data['user'] += 1
user_data['user_adm'].add(user_id)
response_message = (
"Здравствуйте! Я информационный бот , тут может быть ваш текст \n\n"
"Используйте команды:\n"
"/info - информация о боте\n"
)
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
@dp.message_handler(commands=['info'])
async def info(message: types.Message):
response_message = (
"Этот бот может содержать ваш текст , для дальнейших идей \n\n"
"Команды:\n"
"/start - запустить бота\n"
"/info - информация о боте\n"
)
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
@dp.message_handler(commands=['admin'])
async def admin_panel(message: types.Message):
if message.from_user.id != ADMIN_ID:
await message.reply("Вы не имеете доступа к админ-панели.")
return
response_message = (
"Админ-панель\n\n"
"/rasilka <message> - отправить рассылку всем пользователям\n"
"/stata - статистика пользователей"
)
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
@dp.message_handler(commands=['rasilka'])
async def rasilka(message: types.Message):
if message.from_user.id != ADMIN_ID:
await message.reply("Вы не имеете доступа к админ-панели.")
return
text = message.get_args()
if not text:
await message.reply("Пожалуйста, укажите сообщение для рассылки.")
return
sent = 0
failed = 0
for user_id in user_data['user_adm']:
try:
await bot.send_message(user_id, text, parse_mode=ParseMode.MARKDOWN)
sent += 1
except Exception as e:
logging.error(f"Не удалось отправить сообщение пользователю {user_id}: {e}")
failed += 1
await message.reply(f"Рассылка завершена.\nОтправлено: {sent}\nНе удалось отправить: {failed}")
@dp.message_handler(commands=['stata'])
async def stata(message: types.Message):
if message.from_user.id != ADMIN_ID:
await message.reply("Вы не имеете доступа к админ-панели.")
return
response_message = (
f"Общее количество пользователей: {user_data['user']}\n"
f"Пользователи с админкой: {len(user_data['user_adm'])}"
)
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
Давайте разберем выше написанный код
Python: Скопировать в буфер обмена
import logging
- импортируем модуль для логирование и мониторинга
Python: Скопировать в буфер обмена
from aiogram import Bot, Dispatcher, types
- импортируем базовые компоненты библиотеки "aiogram" .
Python: Скопировать в буфер обмена
from aiogram.types import ParseMode
- импортируем "ParseMode" которая предназначена для указания формата сообщений
Python: Скопировать в буфер обмена
from aiogram.utils import executor
- строчка импортирует "executor" ,который предназначен для помощи запуска бота и управление процессом можно сказать
Python: Скопировать в буфер обмена
API_TOKEN = ''
- сюда вводим токен вашего бота (как его получить написал вверху)
Python: Скопировать в буфер обмена
ADMIN_ID = 12345789
- заменяем 123456789 на id юзера которого хотите сделать админом .id можно узнать тут https://t.me/getmyid_bot ( не реклама)
Python: Скопировать в буфер обмена
logging.basicConfig(level=logging.INFO)
- в этой строчке мы настроили базовые параметры логирование
Python: Скопировать в буфер обмена
bot = Bot(token=API_TOKEN)
- строчка создает обьек бота , используя токен (указанный выше)
Python: Скопировать в буфер обмена
dp = Dispatcher(bot)
- строчка отвечает за создание объекта диспетчера ,который в свою очередь управляет обработкой сообщений и т.п
Python: Скопировать в буфер обмена
Code:
user_data = {
"user": 0,
"user_adm": set()
}
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['start'])
- строчка обрабатывает команды ( в данном случаи команду /start
Python: Скопировать в буфер обмена
async def send_welcome(message: types.Message):
- асинхронная функция которая отвечает за обработки команды "/start"
Python: Скопировать в буфер обмена
user_id = message.from_user.id
- строчка получает id пользователя (который отправил сообщение )
Python: Скопировать в буфер обмена
user_data['user'] += 1
- строчка увеличивает число общих юзеров
Python: Скопировать в буфер обмена
user_data['user_adm'].add(user_id)
- добавляет id пользователя в админ панель
Python: Скопировать в буфер обмена
Code:
response_message = (
"Здравствуйте! Я информационный бот , тут может быть ваш текст \n\n"
"Используйте команды:\n"
"/info - информация о боте\n"
)
Python: Скопировать в буфер обмена
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
- строчка отправляет ответ пользователю ("response_message")
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['info'])
- строчка создана для обработки команды "/info"
Python: Скопировать в буфер обмена
async def info(message: types.Message):
- Асинхронная функция для обработки команды "/info"
Python: Скопировать в буфер обмена
Code:
response_message = (
"Этот бот может содержать ваш текст , для дальнейших идей \n\n"
"Команды:\n"
"/start - запустить бота\n"
"/info - информация о боте\n"
)
Python: Скопировать в буфер обмена
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
- отправляет выше написанное нами сообщение пользователю
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['admin'])
- строчка обрабатывает команду "/admin"
Python: Скопировать в буфер обмена
async def admin_panel(message: types.Message):
- Асинхронная функция для обработки команды "/admin"
Python: Скопировать в буфер обмена
if message.from_user.id != ADMIN_ID:
- строчка отвечает за проверку пользователя на наличии доступа к админ панели
Python: Скопировать в буфер обмена
Code:
await message.reply("Вы не имеете доступа к админ-панели.")
return
Python: Скопировать в буфер обмена
Code:
response_message = (
"Админ-панель\n\n"
"/rasilka <message> - отправить рассылку всем пользователям\n"
"/stata - статистика пользователей"
)
Python: Скопировать в буфер обмена
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
- строчка отправляет выше написанное сообщение юзерам у которых есть доступ к админ панели
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['rasilka'])
- строчка будет обрабатывать команду "/rasilka"
Python: Скопировать в буфер обмена
async def rasilka(message: types.Message):
- Асинхронная функция для обработки команды "/rasilka"
Python: Скопировать в буфер обмена
if message.from_user.id != ADMIN_ID:
- строчка отвечает за проверку юзеров на права доступа к админ панели
Python: Скопировать в буфер обмена
Code:
await message.reply("Вы не имеете доступа к админ-панели.")
return
Python: Скопировать в буфер обмена
text = message.get_args()
- строчка отвечает за получение текста сообщение для рассылки
Python: Скопировать в буфер обмена
Code:
if not text:
await message.reply("Пожалуйста, укажите сообщение для рассылки.")
return
Python: Скопировать в буфер обмена
sent = 0
- счетчик для отслеживание успешных отправок сообщений
Python: Скопировать в буфер обмена
failed = 0
- счетчик для отслеживание неуспешных попыток отправки сообщений
Python: Скопировать в буфер обмена
for user_id in user_data['user_adm']:
- Итперация по всем пользователям с правами администратора.
Python: Скопировать в буфер обмена
Code:
try:
await bot.send_message(user_id, text, parse_mode=ParseMode.MARKDOWN)
sent += 1
except Exception as e:
Python: Скопировать в буфер обмена
Code:
logging.error(f"Не удалось отправить сообщение пользователю {user_id}: {e}")
failed += 1
Python: Скопировать в буфер обмена
await message.reply(f"Рассылка завершена.\nОтправлено: {sent}\nНе удалось отправить: {failed}")
- строчка отправляет сообщение с результатом рассылки(показывает сколько было отправлено успешных/не успешных сообщений
Python: Скопировать в буфер обмена
@dp.message_handler(commands=['stata'])
- строчка отвечает за обработку команды "/stata"
Python: Скопировать в буфер обмена
async def stata(message: types.Message):
- Асинхронная функция для обработки команды "/stata"
Python: Скопировать в буфер обмена
Code:
if message.from_user.id != ADMIN_ID:
await message.reply("Вы не имеете доступа к админ-панели.")
return
Python: Скопировать в буфер обмена
Code:
response_message = (
f"Общее количество пользователей: {user_data['user']}\n"
f"Пользователи с админкой: {len(user_data['user_adm'])}"
)
Python: Скопировать в буфер обмена
await message.reply(response_message, parse_mode=ParseMode.MARKDOWN)
- отправка собственно сообщение со статистикой пользователю (админу)
Python: Скопировать в буфер обмена
if __name__ == '__main__':
- строчка проверяет скрипт на выполнение как основной модуль , а не импортированный
Python: Скопировать в буфер обмена
executor.start_polling(dp, skip_updates=True)
- строчка отвечает за скип всех накопленных команд до запуска бота
Вот скрины что мы получим в конце
Давайте сейчас разберем бота автоответчика , то есть пользователю смогу отправлять сообщение боту . А тот в свою очередь будет отправлять все админу, так же добавим функцию отправка сообщения со стороны админа пользователю .Мы до этого писали на библиотеке aiogram , сейчас попрактикуемся на библиотеке telebot.
Спойлер: код
Python: Скопировать в буфер обмена
Code:
import telebot
TOKEN = ""
admin_id = 12345
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def handle_start(message: telebot.types.Message):
if message.from_user.id == admin_id:
bot.send_message(message.chat.id, "Приветствую, администратор!")
else:
bot.send_message(message.chat.id, f"Здравствуйте, {message.from_user.first_name}! Если у вас есть вопросы или предложения, не стесняйтесь обращаться.")
@bot.message_handler(commands=['help'])
def handle_help(message: telebot.types.Message):
bot.send_message(message.chat.id, "Я могу помочь вам с различными задачами. Просто напишите ваш вопрос или отправьте файл. Администратор свяжется с вами в ближайшее время.")
@bot.message_handler(commands=['info'])
def handle_info(message: telebot.types.Message):
bot.send_message(message.chat.id, "Этот бот предназначен для связи с администрацией. Вы можете отправлять сообщения, фотографии и документы. Все сообщения будут переданы администратору.")
@bot.message_handler(commands=['reply'])
def handle_reply_command(message: telebot.types.Message):
if message.from_user.id == admin_id:
try:
args = message.text.split(maxsplit=2)
if len(args) < 3:
bot.send_message(message.chat.id, "Используйте: /reply <user_id> <текст сообщения>")
return
user_id = int(args[1])
reply_text = args[2]
bot.send_message(user_id, reply_text)
bot.send_message(message.chat.id, f"Сообщение отправлено пользователю с ID {user_id}.")
except ValueError:
bot.send_message(message.chat.id, "Неверный формат ID. Убедитесь, что это число.")
else:
bot.send_message(message.chat.id, "У вас нет прав на выполнение этой команды.")
@bot.message_handler(func=lambda message: not message.reply_to_message and message.text and '/start' not in message.text)
def handle_text(message: telebot.types.Message):
text_to_forward = (
f"Сообщение от пользователя {message.from_user.first_name} (ID: {message.from_user.id}):\n"
f"{message.text}"
)
bot.forward_message(admin_id, message.chat.id, message.message_id)
bot.send_message(admin_id, text_to_forward)
bot.send_message(message.chat.id, f"Ваше сообщение получено! Администратор вскоре ответит. Ваш ID: {message.from_user.id}")
@bot.message_handler(func=lambda message: message.reply_to_message)
def handle_reply(message: telebot.types.Message):
if message.from_user.id == admin_id:
if message.reply_to_message.forward_from:
bot.send_message(message.reply_to_message.forward_from.id, message.text)
else:
bot.send_message(message.chat.id, "Ответы на сообщения не разрешены.")
@bot.message_handler(content_types=['photo'])
def handle_photo(message: telebot.types.Message):
text_to_forward = (
f"Фото от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
bot.forward_message(admin_id, message.chat.id, message.message_id)
bot.send_message(message.chat.id, f"Фото получено и передано администратору. Ваш ID: {message.from_user.id}")
@bot.message_handler(content_types=['document'])
def handle_document(message: telebot.types.Message):
text_to_forward = (
f"Документ от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
bot.forward_message(admin_id, message.chat.id, message.message_id)
bot.send_message(admin_id, text_to_forward)
bot.send_message(message.chat.id, f"Документ получен и передан администратору. Ваш ID: {message.from_user.id}")
@bot.message_handler(content_types=['voice'])
def handle_voice(message: telebot.types.Message):
text_to_forward = (
f"Голосовое сообщение от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
bot.forward_message(admin_id, message.chat.id, message.message_id)
bot.send_message(admin_id, text_to_forward)
bot.send_message(message.chat.id, f"Голосовое сообщение получено и отправлено администратору. Ваш ID: {message.from_user.id}")
if __name__ == '__main__':
print("Бот запущен...")
bot.polling(none_stop=True)
начнем разбор кода !!!!
import telebot - импортируем библиотеку "telebot" .Данная библиотека используется для создание работы с телеграмм ботами, она намного упрощает взаимодействие с телеграмм api . Но по сравнению с aiogram по моему telebot чутка но отстает
Python: Скопировать в буфер обмена
TOKEN = ""
- сюда вводим токен нашего бота
Python: Скопировать в буфер обмена
admin_id = 12345
- вместо 12345 вводим свой id
Python: Скопировать в буфер обмена
bot = telebot.TeleBot(TOKEN)
- создаем можно сказать экземпляр бота с помощью токена , который в свою очередь передается "telebot.TeleBot"
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['start'])
- строчка будет обрабатывать сообщение с командой "/start"
Python: Скопировать в буфер обмена
def handle_start(message: telebot.types.Message):
- строчка отвечает за определение функции сообщения можно сказать
Python: Скопировать в буфер обмена
if message.from_user.id == admin_id:
- строчка проверяет соответствует ли id юзера на наличие доступа к админке
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, "Приветствую, администратор!")
- если юзер прошел проверку и имеет доступ к админ панели то бот е го приветствует
Python: Скопировать в буфер обмена
Code:
else:
bot.send_message(message.chat.id, f"Здравствуйте, {message.from_user.first_name}! Если у вас есть вопросы или предложения, не стесняйтесь обращаться.")
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['help'])
- строчка обрабатывает команду "/help"
Python: Скопировать в буфер обмена
def handle_help(message: telebot.types.Message):
- можно сказать это функция обработки команды "/help"
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, "Я могу помочь вам с различными задачами. Просто напишите ваш вопрос или отправьте файл. Администратор свяжется с вами в ближайшее время.")
- данное сообщение бот отправляет если человек прописал команду "/help"
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['info'])
- строчка обрабатывает команду "/info"
Python: Скопировать в буфер обмена
def handle_info(message: telebot.types.Message):
- функция для обработки команды "/info"
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, "Этот бот предназначен для связи с администрацией. Вы можете отправлять сообщения, фотографии и документы. Все сообщения будут переданы администратору.")
- если человек прописал команду "/info" то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['reply'])
- обработчик команды "/reply"
Python: Скопировать в буфер обмена
def handle_reply_command(message: telebot.types.Message):
- Функция для обработки команды "/reply"
Python: Скопировать в буфер обмена
if message.from_user.id == admin_id:
- проверяет имеет ли юзер доступ к админ панели
Python: Скопировать в буфер обмена
Code:
try:
args = message.text.split(maxsplit=2)
Python: Скопировать в буфер обмена
if len(args) < 3:
- строчка отвечает за проверку достатка количество символов
Python: Скопировать в буфер обмена
Code:
bot.send_message(message.chat.id, "Используйте: /reply <user_id> <текст сообщения>")
return
Python: Скопировать в буфер обмена
user_id = int(args[1])
- Преобразование второго аргумента в целое число, представляющее ID пользователя.
Python: Скопировать в буфер обмена
reply_text = args[2]
- текст ответа
Python: Скопировать в буфер обмена
bot.send_message(user_id, reply_text)
- строчка отправляет сообщение пользователю по указанному выше id
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, f"Сообщение отправлено пользователю с ID {user_id}.")
- если отправка сообщение закончилась успехом то бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
except ValueError:
- можно сказать строчка обработает ошибку в случае неверного id
bot.send_message(message.chat.id, "Неверный формат ID. Убедитесь, что это число.")[/CODE] - бот отправит выше написанное сообщение если юзер с таким ид не зарегистрирован в боте
Python: Скопировать в буфер обмена
Code:
else:
bot.send_message(message.chat.id, "У вас нет прав на выполнение этой команды.")
Python: Скопировать в буфер обмена
@bot.message_handler(func=lambda message: not message.reply_to_message and message.text and '/start' not in message.text)
- можно сказать это обработчик сообщений , которые не являются ответами или не содержит команду "/start"
Python: Скопировать в буфер обмена
def handle_text(message: telebot.types.Message):
- можно сказать это функция для обработки сообщений
Python: Скопировать в буфер обмена
Code:
text_to_forward = (
f"Сообщение от пользователя {message.from_user.first_name} (ID: {message.from_user.id}):\n"
f"{message.text}")
Python: Скопировать в буфер обмена
bot.forward_message(admin_id, message.chat.id, message.message_id)
- строчка пересылает сообщение юзера админу
Python: Скопировать в буфер обмена
bot.send_message(admin_id, text_to_forward)
- сама отправка сообщения от юзера к админу
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, f"Ваше сообщение получено! Администратор вскоре ответит. Ваш ID: {message.from_user.id}")
- если все прошло успешно то бот отправит выше написанное сообщение юзеру
Python: Скопировать в буфер обмена
@bot.message_handler(func=lambda message: message.reply_to_message)
- строчка отвечает за обработку сообщений , которые являются ответами на другие сообщения
Python: Скопировать в буфер обмена
def handle_reply(message: telebot.types.Message):
- сама функция для обработки ответов
Python: Скопировать в буфер обмена
if message.from_user.id == admin_id:
- строчка проверяет отправителя сообщение на наличие доступа к админ панельки
Python: Скопировать в буфер обмена
if message.reply_to_message.forward_from:
- строчка проверяет исходное сообщение ( если простыми словами ,то строчка проверяет есть ли отправитель у сообщения )
Python: Скопировать в буфер обмена
bot.send_message(message.reply_to_message.forward_from.id, message.text)
- строчка отправляет ответ
Python: Скопировать в буфер обмена
Code:
else:
bot.send_message(message.chat.id, "Ответы на сообщения не разрешены.")
Python: Скопировать в буфер обмена
@bot.message_handler(content_types=['photo'])
- строчка будет обрабатывать сообщение где есть фотка
Python: Скопировать в буфер обмена
def handle_photo(message: telebot.types.Message):
- данная функция нужна для обработки фотографий
Python: Скопировать в буфер обмена
Code:
text_to_forward = (
f"Фото от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
Python: Скопировать в буфер обмена
bot.forward_message(admin_id, message.chat.id, message.message_id)
- строчка отправляет (пересылает ) фотографию админу
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, f"Фото получено и передано администратору. Ваш ID: {message.from_user.id}")
- если все прошло успешно то бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
@bot.message_handler(content_types=['document'])
- данная строчка будет обрабатывать сообщения содержащих какие либо документы (файлы)
Python: Скопировать в буфер обмена
def handle_document(message: telebot.types.Message):
- сама функция для обработки документов (файлов)
Python: Скопировать в буфер обмена
Code:
text_to_forward = (
f"Документ от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
Python: Скопировать в буфер обмена
bot.forward_message(admin_id, message.chat.id, message.message_id)
- строчка пересылает документы администратору
Python: Скопировать в буфер обмена
bot.send_message(admin_id, text_to_forward)
- сама отправка сообщение админу
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, f"Документ получен и передан администратору. Ваш ID: {message.from_user.id}")
- если все прошло успешно бот показывает выше написанное сообщение
Python: Скопировать в буфер обмена
@bot.message_handler(content_types=['voice'])
- строчка обрабатывает голосовые сообщения
Python: Скопировать в буфер обмена
def handle_voice(message: telebot.types.Message):
- сама функция для обработки голосовых сообщений
Python: Скопировать в буфер обмена
Code:
text_to_forward = (
f"Голосовое сообщение от пользователя {message.from_user.first_name} (ID: {message.from_user.id})"
)
Python: Скопировать в буфер обмена
bot.forward_message(admin_id, message.chat.id, message.message_id)
- пересылка голосового сообщения админу
Python: Скопировать в буфер обмена
bot.send_message(admin_id, text_to_forward)
- сама отправка голосового сообщение админу
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, f"Голосовое сообщение получено и отправлено администратору. Ваш ID: {message.from_user.id}")
- если все прошло успешно то бот отправляет выше написанное сообщение
Python: Скопировать в буфер обмена
if __name__ == '__main__':
- можно сказать это проверка что скрипт запускается напрямую а не импортируется как модуль
Python: Скопировать в буфер обмена
print("Бот запущен...")
- сообщение показывает успешный запуск бота
Python: Скопировать в буфер обмена
bot.polling(none_stop=True)
- Метод "polling" позволяет боту получать обновления от Telegram и обрабатывать их. Параметр "none_stop=True" указывает, что бот должен продолжать работу в случае возникновения ошибок.
Вот что у нас получилось
Спойлер: скрин
Давайте напишем последний для этой статьи бот , который будет показывать самые новые новости по команде /news .Мы напишем все на telebote , я напишу отдельную статью по aiogram .
Python: Скопировать в буфер обмена
Code:
import telebot
import requests
TELEGRAM_TOKEN = '6672409243:AAHfoFHqaFGpOpkbjHAgGRPALz_ZqxTZmng'
NEWS_API_KEY = '1ddfaaf6f6b24e4a8b8c47833edb8501'
bot = telebot.TeleBot(TELEGRAM_TOKEN)
def get_latest_news():
url = f'https://newsapi.org/v2/top-headlines?country=ru&apiKey={NEWS_API_KEY}'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
articles = data.get('articles', [])
if articles:
news_list = []
for article in articles[:5]:
title = article.get('title', 'Нет заголовка')
url = article.get('url', 'Нет URL')
news_list.append(f'{title}\n{url}')
return '\n\n'.join(news_list)
else:
return "Новости не найдены."
else:
return "Не удалось получить новости."
@bot.message_handler(commands=['start'])
def handle_start(message):
bot.reply_to(message, "Приветствую! Используйте команду /news, чтобы получить последние новости.")
@bot.message_handler(commands=['news'])
def handle_news(message):
news = get_latest_news()
bot.send_message(message.chat.id, news)
if __name__ == '__main__':
print("Бот запущен")
bot.polling(none_stop=True)
Начнем разбор самого кода !
Python: Скопировать в буфер обмена
import telebot
- строчка импортирует библиотеку "pyTelegramBotAPI" для дальнейшей работы
Python: Скопировать в буфер обмена
import requests
- импортируем библиотеку которая нужна для работы http запросами
Python: Скопировать в буфер обмена
TELEGRAM_TOKEN = ''
- сюда вводим наш телеграмм токен
Python: Скопировать в буфер обмена
NEWS_API_KEY = ' '
- сюда вводим наш апи ключ ( его можно взять тут https://newsapi.org/account(не реклама ))
Python: Скопировать в буфер обмена
bot = telebot.TeleBot(TELEGRAM_TOKEN)
- можно сказать строчка создает новый объект используя токен .Это нужно для взаимодействия с телеграмм api
Python: Скопировать в буфер обмена
Code:
def get_latest_news():
url = f'https://newsapi.org/v2/top-headlines?country=ru&apiKey={NEWS_API_KEY}'
Python: Скопировать в буфер обмена
response = requests.get(url)
- Выполняем GET-запрос к API новостей
Python: Скопировать в буфер обмена
if response.status_code == 200:
- строчка проверяет успешен ли наш запрос
Python: Скопировать в буфер обмена
data = response.json()
- получает данные ответа в формате JSON
Python: Скопировать в буфер обмена
articles = data.get('articles', [])
- строчка извлекает список статей из ответа .А если "articles" отсутствует ,то возвращаем список но уже пустым
Python: Скопировать в буфер обмена
if articles:
- проверка на наличии статей в списке
Python: Скопировать в буфер обмена
news_list = []
- строчка создает пустой список (для хранение новостей)
Python: Скопировать в буфер обмена
for article in articles[:5]:
- перебираем первые 5 статей ( кол во статей можете изменить )
Python: Скопировать в буфер обмена
title = article.get('title', 'Нет заголовка')
- строчка получает заголовок статьи , если его нет то пишет об этом
Python: Скопировать в буфер обмена
url = article.get('url', 'Нет URL')
- получаем url статьи , если url нету то пишет об этом
Python: Скопировать в буфер обмена
news_list.append(f'{title}\n{url}')
- строчка добавляет заголовок и url самой статьи в список
Python: Скопировать в буфер обмена
return '\n\n'.join(news_list)
- строчка формирует строку с новостями
Python: Скопировать в буфер обмена
Code:
else:
return "Новости не найдены."
Python: Скопировать в буфер обмена
Code:
else:
return "Не удалось получить новости."
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['start'])
- строчка выполняет функцию обработки команды "/start"
Python: Скопировать в буфер обмена
Code:
def handle_start(message):
bot.reply_to(message, "Приветствую! Используйте команду /news, чтобы получить последние новости.")
Python: Скопировать в буфер обмена
@bot.message_handler(commands=['news'])
- строчка отвечает за обработку команды "/news"
Python: Скопировать в буфер обмена
def handle_news(message):
- сама функция обработки команды "/news"
Python: Скопировать в буфер обмена
news = get_latest_news()
- при помощи "get_latest_news" получаем последние новости
Python: Скопировать в буфер обмена
bot.send_message(message.chat.id, news)
- отправляем готовый результат пользователю
Python: Скопировать в буфер обмена
if __name__ == '__main__':
- строчка проверяет скрипт что он выполняется напрямую а не через импорт
Python: Скопировать в буфер обмена
print("Бот запущен")
- если все успешно получилось то в консоли можно увидеть такой текст
Вот что мы получаем на выходе
Спойлер: скрин
Этот код позволяет создать бота в телеграмм , который в свою очередь отвечает за свежие новости с региона РФ по команду /news . Скрипт работает по по апи , да и принципе я добавил данный скрипт для усвоение работы с апи
Давайте подведем итоги данной статьи .Мы разобрали пару скриптов на telebote а так же на библиотеке aiogram, мы начали изучение с простого и закончили более сложным.А так же рассмотрели работу телеграмм ботов по апи , надеюсь статьи была интересной .Назовите мне тематику на которую мне стоит написать статью ( я обязательно напишу если это будет в моих силах ) .Удачного дня всем