Создание Бота в Телеграм
📃Подготовка📃
- Скачать VSCode https://code.visualstudio.com/download
- Установить питон 3.13 https://www.python.org/downloads/ (При установке ОБЯЗАТЕЛЬНО СТАВИМ ГАЛОЧКУ НА "АДМИНСКИЕ ПРИВЕЛЕГИИ" И "ДОБАВИТЬ В PATH")
Для начала нам нужно создать папку для нашего будущего проекта. Я обычно храню все свои проекты в папке C:\PythonProject. Перейдите в эту директорию и создайте новую папку с названием first_app (Можно другое но НЕ НА РУССКОМ!!!).
После этого можно запустить Visual Studio Code и открыть в нём нашу папку. Для этого нажмите на кнопку “Open Folder…”, затем в открывшемся окне выберите нужную папку и нажмите кнопку “Выбор папки”.
В открывшемся окне необходимо подтвердить, что мы доверяем этой папке и всем файлам в ней. Для этого установите флажок напротив пункта «Trust the authors of all files in the parent folder ‘PythonProject’» и нажмите кнопку «Yes, I trust the authors».
Теперь давайте создадим файл для нашей программы. Для этого щёлкните по иконке «New File», которая находится в проводнике нашего проекта справа от названия проекта.
Создание нового файла в проекте
Введите название «main.py» и нажмите Enter.
Присваивание имени новому файлу в проекте
Поскольку мы добавили расширение .py к файлу, IDE определила, что этот файл относится к языку программирования Python, и предложила нам выбрать интерпретатор. Мы нажимаем на жёлтую кнопку «Select Interpreter» и в выпадающем списке выбираем нужную нам версию Python. Я выбрал 3.10.11.
Так как VsCode — мультиплатформенная среда разработки, нам потребуется добавить поддержку синтаксиса языка Python. Для этого можно нажать сочетание клавиш Ctrl+Shift+X или кликнуть по иконке Extensions в левом вертикальном меню.
В открывшемся окне вводим «Python» и выбираем самый верхний из предложенных вариантов, он опубликован Microsoft. Чтобы установить, нажимаем кнопку «Install».
Теперь нам осталось заполнить файл программы каким-нибудь кодом. Для примера добавим в файл main.py такой код:
#Это комментарий
print('Hello, World!')
Чтобы запустить программу, нужно нажать на значок запуска в правом верхнем углу.
👍😁Поздравляю! Вы создали свой первый проект в IDE Visual Studio Code!
УСТАНОВКА БИБЛИОТЕК
В верхней панели кликаем на Терминал и открываем внизу powershell. Скачиваем библиотеки вставляя туда код ниже и нажимая Enter
pip install python-telegram-bot
Переходим к Боту✅
СПОСОБ 1:
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python'е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
sudo apt-get install python python-pip
Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .
После, в терминале Linux, или командной строке Windows вводим
pip install pytelegrambotapi
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll'ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
import telebot;bot = telebot.TeleBot('%ваш токен%');Теперь объявим метод для получения текстовых сообщений:
@bot.message_handler(content_types=['text'])def get_text_messages(message):
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
@bot.message_handler(content_types=['text', 'document', 'audio'])
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
if message.text == "Привет": bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?")elif message.text == "/help": bot.send_message(message.from_user.id, "Напиши привет")else: bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
bot.polling(none_stop=True, interval=0)
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
python bot.py
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
name = '';surname = '';age = 0;@bot.message_handler(content_types=['text'])def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "Как тебя зовут?"); bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name else: bot.send_message(message.from_user.id, 'Напиши /reg');def get_name(message): #получаем фамилию global name; name = message.text; bot.send_message(message.from_user.id, 'Какая у тебя фамилия?'); bot.register_next_step_handler(message, get_surnme);def get_surname(message): global surname; surname = message.text; bot.send_message('Сколько тебе лет?'); bot.register_next_step_handler(message, get_age);def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?')И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); keyboard = types.InlineKeyboardMarkup(); #наша клавиатура key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes'); #кнопка «Да» keyboard.add(key_yes); #добавляем кнопку в клавиатуру key_no= types.InlineKeyboardButton(text='Нет', callback_data='no'); keyboard.add(key_no); question = 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
@bot.callback_query_handler(func=lambda call: True)def callback_worker(call): if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки .... #код сохранения данных, или их обработки bot.send_message(call.message.chat.id, 'Запомню : )'); elif call.data == "no": ... #переспрашиваем
Остаётся только дописать в начало файла одну строку:
from telebot import types
Вот и всё, сохраняем и запускаем нашего бота:
СПОСОБ 2 (ДРУГАЯ БИБЛИОТЕКА)
Создание простого Telegram-бота на Python, который будет отвечать "Привет" при команде /start, можно реализовать с помощью библиотеки python-telegram-bot. Убедитесь, что у вас установлен Python и библиотека python-telegram-bot. Если библиотека не установлена, вы можете установить её с помощью pip:
pip install python-telegram-bot
import logging
from telegram import Update
from telegram.ext import Updater, CommandHandler, CallbackContext
# Включаем логирование
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
# Определяем функцию, которая будет обрабатывать команду /start
def start(update: Update, context: CallbackContext) -> None:
update.message.reply_text('Привет')
def main() -> None:
# Вставьте сюда ваш токен
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN'
# Создаем Updater и передаем ему токен вашего бота
updater = Updater(TOKEN)
# Получаем диспетчер для регистрации обработчиков
dispatcher = updater.dispatcher
# Регистрация обработчика команды /start
dispatcher.add_handler(CommandHandler("start", start))
# Запускаем бота
updater.start_polling()
# Ожидаем завершения работы
updater.idle()
if __name__ == '__main__':
main()
Инструкции по использованию:
- Замените
YOUR_TELEGRAM_BOT_TOKENна токен вашего бота, который вы можете получить у BotFather. - Запустить программу И НЕ ВЫКЛЮЧАТЬ ПОКА НЕ ЗАКОНЧИШЬ ДИАЛОГ ИНАЧЕ БОТ НЕ ОТВЕТИТ. Это происходит из за того что компьютер выступает в роли ХОСТА для бота