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