🦋 Telegram боты — это мощный инструмент для автоматизации задач, взаимодействия с пользователями и создания полезных сервисов. В этой статье я подробно расскажу, как создать своего первого Telegram бота с нуля.
Что такое Telegram бот?
Telegram бот — это специальная учетная запись, управляемая программой, а не человеком. Боты могут:
· Отвечать на сообщения
· Выполнять команды
· Отправлять уведомления
· Интегрироваться с другими сервисами
Шаг 1: Создание бота через BotFather
Перед написанием кода нужно зарегистрировать бота:
1. Откройте Telegram и найдите @BotFather
2. Отправьте команду /newbot
3. Укажите имя бота (отображаемое имя)
4. Придумайте username бота (должен заканчиваться на bot)
5. Сохраните полученный токен — он понадобится для API
Шаг 2: Установка необходимых библиотек
Для Python установите библиотеку python-telegram-bot:
```bash
pip install python-telegram-bot
```
Для более новых версий фреймворка:
```bash
pip install python-telegram-bot==20.0
```
Шаг 3: Базовая структура бота
Создайте файл bot.py и добавьте следующий код:
```python
import logging
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# Настройка логирования
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
# Замените на ваш токен
BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"
# Команда /start
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"Привет! Я твой первый Telegram бот. "
"Используй /help чтобы увидеть список команд."
)
# Команда /help
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
help_text = """
Доступные команды:
/start - Начать работу
/help - Показать эту справку
/about - О боте
"""
await update.message.reply_text(help_text)
# Обработка текстовых сообщений
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
text = update.message.text.lower()
if 'привет' in text:
response = "И тебе привет! 😊"
elif 'как дела' in text:
response = "Отлично! А у тебя?"
else:
response = "Я еще учусь. Попробуй сказать 'привет'!"
await update.message.reply_text(response)
# Обработка ошибок
async def error_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
logging.error(f"Ошибка: {context.error}")
# Основная функция
def main():
# Создаем приложение
application = Application.builder().token(BOT_TOKEN).build()
# Добавляем обработчики команд
application.add_handler(CommandHandler("start", start_command))
application.add_handler(CommandHandler("help", help_command))
# Добавляем обработчик текстовых сообщений
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
# Добавляем обработчик ошибок
application.add_error_handler(error_handler)
# Запускаем бота
print("Бот запущен...")
application.run_polling()
if __name__ == "__main__":
main()
```
Шаг 4: Добавление инлайн-кнопок
Расширим функциональность, добавив интерактивные кнопки:
```python
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
# Команда с кнопками
async def menu_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = [
[InlineKeyboardButton("Option 1", callback_data="opt1"),
InlineKeyboardButton("Option 2", callback_data="opt2")],
[InlineKeyboardButton("Help", callback_data="help")]
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text(
"Выберите опцию:",
reply_markup=reply_markup
)
# Обработчик нажатий на кнопки
async def button_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer()
data = query.data
if data == "opt1":
await query.edit_message_text("Вы выбрали Option 1")
elif data == "opt2":
await query.edit_message_text("Вы выбрали Option 2")
elif data == "help":
await query.edit_message_text("Это помощь!")
# В функции main добавьте:
application.add_handler(CommandHandler("menu", menu_command))
application.add_handler(CallbackQueryHandler(button_handler))
```
Шаг 5: Работа с медиафайлами
Добавим возможность отправки изображений:
```python
# Отправка изображения
async def send_photo_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
# Можно отправить файл по URL или с локального диска
photo_url = "https://example.com/image.jpg"
await update.message.reply_photo(photo=photo_url, caption="Вот изображение!")
# Обработка полученных фото
async def handle_photo(update: Update, context: ContextTypes.DEFAULT_TYPE):
photo = update.message.photo[-1] # Берем самое качественное фото
await update.message.reply_text("Спасибо за фото! Я его получил.")
```
Шаг 6: Хранение данных
Для простого хранения данных можно использовать словарь:
```python
# Простое хранилище в памяти
user_data = {}
async def set_name_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_id = update.message.from_user.id
if context.args:
name = ' '.join(context.args)
user_data[user_id] = name
await update.message.reply_text(f"Имя сохранено: {name}")
else:
await update.message.reply_text("Укажите имя: /setname Ваше Имя")
async def get_name_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_id = update.message.from_user.id
name = user_data.get(user_id, "не установлено")
await update.message.reply_text(f"Ваше имя: {name}")
```
Шаг 7: Развертывание бота
Локальный запуск:
```bash
python bot.py
```
На сервере (используя systemd):
Создайте файл /etc/systemd/system/telegram-bot.service:
```ini
[Unit]
Description=Telegram Bot
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/path/to/your/bot
ExecStart=/usr/bin/python3 /path/to/your/bot/bot.py
Restart=always
[Install]
WantedBy=multi-user.target
```
Лучшие практики
1. Безопасность: Никогда не публикуйте токен бота
2. Обработка ошибок: Всегда добавляйте обработчики ошибок
3. Логирование: Ведите логи для отладки
4. Производительность: Используйте асинхронные операции
5. Масштабируемость: Для production используйте вебхуки вместо polling
Заключение
Создание Telegram бота — это увлекательный процесс, который открывает множество возможностей для автоматизации и взаимодействия с пользователями. Начните с простого бота, постепенно добавляя новую функциональность по мере освоения API.
Следующие шаги для развития:
· Изучение Webhook для production использования
· Интеграция с базами данных
· Добавление аутентификации пользователей
· Создание сложных интерактивных меню
· Интеграция с внешними API
Удачи в создании вашего Telegram бота!🐝