November 20, 2024

Создание Бота в Телеграм

📃Подготовка📃

  1. Скачать VSCode https://code.visualstudio.com/download
  2. Установить питон 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 в левом вертикальном меню.

Переход в раздел Extensions

В открывшемся окне вводим «Python» и выбираем самый верхний из предложенных вариантов, он опубликован Microsoft. Чтобы установить, нажимаем кнопку «Install».

Установка поддержки Python

Теперь нам осталось заполнить файл программы каким-нибудь кодом. Для примера добавим в файл main.py такой код:

#Это комментарий
print('Hello, World!')

Заполненный файл main.py

Чтобы запустить программу, нужно нажать на значок запуска в правом верхнем углу.

Запуск main.py

👍😁Поздравляю! Вы создали свой первый проект в IDE Visual Studio Code!

УСТАНОВКА БИБЛИОТЕК

В верхней панели кликаем на Терминал и открываем внизу powershell. Скачиваем библиотеки вставляя туда код ниже и нажимая Enter

pip install pytelegrambotapi

pip install requests

pip install python-telegram-bot

Переходим к Боту✅

СПОСОБ 1:

Часть 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()

Инструкции по использованию:

  1. Замените YOUR_TELEGRAM_BOT_TOKEN на токен вашего бота, который вы можете получить у BotFather.
  2. Запустить программу И НЕ ВЫКЛЮЧАТЬ ПОКА НЕ ЗАКОНЧИШЬ ДИАЛОГ ИНАЧЕ БОТ НЕ ОТВЕТИТ. Это происходит из за того что компьютер выступает в роли ХОСТА для бота
  1. Откройте Telegram, найдите своего бота и отправьте команду /start. Бот должен ответить "Привет".