В этой статье вы узнаете основы создания telegram бота на python. Сначала создается бот в приложении telegram, а затем с помощью python прописывается его функционал. Соединение между кодом из python и ботом происходит за счет специального токена, который вы получите при создании бота в приложении telegram. И так по порядку.
Работа с BotFathe
Для создания бота в приложении нужно перейти в BotFathe и в текстовом поле ввести команду /newbot или выбрать её из меню.
- После этого нужно указать боту имя. Имя может быть любое, его потом можно будет поменять.
- Теперь нужно придумать ему логин, названи по которому мы сможем обращаться к вашему боту. Здесь нужно придумать имя на латинице, без пробелов, специальных символов и в конце обязательно дописать bot. Например, test_itsfera_bot.
- После успешного добавления вам выдадут уникальный токен. С помощью него мы будем управлять нашим ботом и поэтому никому нельзя говорить и показывать этот токен. Если с токеном что-то случилось, то его можно сгенерировать заново.
Для изменения бота в BotFather есть много различных команд. В таблице ниже я предоставил список часто используемых.
Основные команды BotFather | |
---|---|
/newbot | создание нового бота (create a new bot) |
/mybots | вывести список созданных ботов с возможностью редактировать |
/token | сгенерировать новый API токен для бота |
/setname | изменить имя бота |
/setdescription | изменить описание бота |
/setuserpic | установить изображение бота (добавить аватарку) |
/setcommands | Добавить команду для бота |
/setdomain | привязать домен сайта к боту |
/deletebot | удалить бота |
/cancel | отменить (позволяет вернуться к началу) |
Библиотека python для создания бота telegram
Самые распространённые библиотеки — это aiogram и telebot. Они практически одинаковы и отличие их лишь в том, что aiogram позволяет делать асинхронные функции. Но telebot намного проще в освоении и для большинства проектов его вполне достаточно. В этой статье мы будем использовать библиотеку telebot. Документацию по этой библиотеке можно почитать здесь. Документация telebot на русском языке здесь (на момент написания переведено всё кроме Types of API).
Устанавливаем библиотеку в наш проект: pip install pyTelegramBotAPI
Код для бота
Создаем два python файла. В одном мы будем писать весь код, а в другом будем хранить переменную с нашим токеном. Для примера я создам bot.py, где будет находится основной код и config.py, где будет содержаться токен нашего бота.
Для начала в config.py прописываем переменную в которую помещаем наш токен:
token = ‘Ваш токен из BotFathe’
Теперь переходим в bot.py, импортируем установленную библиотеку в наш проект import telebot и подключаем наш config.py from config import token
Теперь создаем и подключаем нашего бота. Для этого создаем переменную и прописываем следующее:
mybot = telebot.TeleBot(token)
где mybot # название переменной (может быть любой)
telebot # обращаемся к модулю
TeleBot(token) # обращаемся к классу TeleBot и в () передаем токен
Обработчик сообщений
При написании любого телеграм бота мы в основном всегда создаем обработчики. Эти обработчики обрабатывают сообщения, которые пользователь пишет боту. Разберем это на примере команды start. Когда пользователь введет эту команду, то получит определенный ответ.
@mybot.message_handler(commands=['start'])
def start_mess(message):
mybot.send_message(message.chat.id, 'Привет!')
mybot.infinity_polling()
# Пояснение:
@mybot.message_handler # обращаемся к нашему боту и вызываем
# метод обработки сообщения
(commands=['start']) # фильтр по которому идет отслеживание,
# список других фильтров в таблице ниже
commands= # означает, что будем обрабатывать команду
['start'] # указываем какую команду будем обрабатывать,
# ели хотим обрабатывать сразу несколько команд,
# то перечисляем их через запятую.
def start_mess(message): # создаем функцию
mybot.send_message # говорим боту отправить сообщение
mybot # имя нашего бота
.send_message # метод, который отправляет сообщение текстом,
# ниже вы найдете другие методы отправки.
(message.chat.id, 'Привет!') # выводим в чат сообщение Привет!
.chat # обращаемся к чату
.id # это id чата куда нужно отправить сообщение
'Привет!' # сообщение, которое будет отправлено в чат
mybot.infinity_polling() # указываем чтобы наш бот постоянно работает
Сохраняем и запускаем наш python файл. Переходим в нашего бота и пробуем написать команду /start. Если вы всё сделали правильно, то каждый раз при вводе этой команды, бот будет отвечать Привет!
Фильтры обработки
При обработки сообщения (message_handle), мы применили фильтр commands и отслеживали команды. Также можно использовать и другие фильтры отслеживания.
NAME | ARGUMENT(S) | CONDITION |
content_types | список строк (по умолчанию [‘text’]) | True, если message.content_type находится в списке строк |
regexp | регулярное выражение в виде строки | True, если re.searh(regexp_arg) возвращает True и message.content_type==’text’ |
commands | список строк команд | True, если message.content_type == ‘text’ и message.text начинается с команды, которая находится в списке строк |
chat_types | список типов чатов | True, если message.content_type в вашем фильтре |
func | функция (лямбда или ссылка на функцию) | True, если лямбда или ссылка на функцию возвращается True |
Одним из часто используемых фильтров является content_types с помощью него мы можем отслеживать отправленные пользователем не только команды и текст, но и фото, аудио и так далее.
content_types может быть: | |
text | обычное текстовое поле |
audio | аудио-файл |
document | документ |
photo | фотография или изображение |
sticker | стикер |
video | видео |
voice | голосовое сообщение |
location | геолокация |
contact | контакт |
Отправка сообщений
В примере на команду /start наш бот отправлял пользователю сообщение (send_message). Но можно отправлять не только текст. За счет функций send вы можете отправлять разные типы файлов. Рассмотрим основные:
- .send_photo – отправка фотографии
- .send_audio – отправка звука / мелодии
- .send_video – отправка видео
- .send_message – отправка сообщения
Создание кнопок
В Telegram вы можете создать два типа кнопок:
- telebot.types.InlineKeyboardMarkup – встроенные кнопки, что отображаются возле сообщения
- telebot.types.ReplyKeyboardMarkup – кнопки, что отображаются возле клавиатуры
Оба типа работают по схожему принципу. Разница лишь в месте где они отображаются и способе обработки нажатия. Для встроенных кнопок используется параметр callback_data для каждой отдельной кнопки. Для reply кнопок используется регистрация следующего действия.
Встроенные кнопки
Разберём пример создания встроенных кнопок. Для начало необходимо создать клавиатуру. Создаем переменную и прописываем ей команду:
my_keyboard = telebot.types.InlineKeyboardMarkup()
Теперь можно создавать кнопки:
ey_one = telebot.types.InlineKeyboardButton(text='Больше 18', callback_data='1')
# Пояснение:
# InlineKeyboardButton - создание кнопки
# text='Больше 18?' - название кнопки
# callback_data='1' - значение, которое будет возвращать кнопка
# Создадим вторую кнопку:
key_two = telebot.types.InlineKeyboardButton(text='Меньше 18', callback_data='2')
# После создания кнопок их нужно добавить в клавиатуру:
my_keyboard.add(key_one)
my_keyboard.add(key_two)
#Теперь мы можем вывести эти кнопки пользователю:
mybot.send_message(message.chat.id, 'Сколько вам лет?', reply_markup=my_keyboard)
Обработчик кнопок
Кнопки мы создали, но теперь нужно сделать чтобы при их нажатии пользователь получал информацию.
@mybot.callback_query_handler(func=lambda call: True)
def callbackboard(call):
if call.data == '1':
mybot.send_message(call.message.chat.id, 'Доступ открыт')
if call.data == '2':
mybot.send_message(call.message.chat.id, 'Доступ пока закрыт')
Пишите в комментариях нужно ли больше информации по созданию telegram bot на python?
Пока нет комментариев. Будьте первым!