Создание телеграм бота с помощью Python

телеграм бот

Как создать телеграм бота практически с неограниченным функционалом. Если вы знаете Python — то это будет несложно!

Какую библиотеку выбрать?

Одной из лучших библиотек Python для работы с Telegram является aiogram. Она предназначена для создания ботов на Telegram и имеет высокую производительность и поддержку. Однако, у aiogram может быть проблема с документацией, но есть чат в Telegram, где всегда можно получить помощь от разработчика библиотеки.

Если вам нужно что-то простое с несколькими хэндлерами и вы не хотите тратить много времени на изучение, то можно использовать библиотеку python-telegram-bot. У нее есть подробная документация, сниппеты кода и она поддерживает асинхронность с помощью декоратора @run_async.

Вы также можете запустить сервер без сервера на платформах Azure, Google, AWS или Yandex Functions с бесплатным лимитом в 1 000 000 обращений в месяц.

Также стоит обратить внимание на библиотеку telethon, если вам требуется делать то, что может только клиент Telegram, например, загружать файлы размером более 40 МБ. Она асинхронная и общается с серверами Telegram по протоколу MTProto. Одна из реализаций telethon, подходящая для создания ботов — Garnet.

Исходя из этой информации, можно сделать следующие выводы:

  • Если вам нужна библиотека с высокой производительностью и поддержкой, но вы готовы справляться с возможными трудностями в документации, выбирайте aiogram.
  • Если вам нужно что-то простое и хотите подробную документацию и сниппеты кода, обратите внимание на python-telegram-bot.
  • Если вам нужно делать то, что может только клиент Telegram, рассмотрите библиотеку telethon.

Порядок создания нового телеграм бота

Действия в телеграм

  1. Создайте новый бот в Telegram через BotFather:
  2. Откройте Telegram и найдите BotFather.
  3. Начните диалог с BotFather и нажмите «/start».
  4. Следуйте инструкциям BotFather для создания нового бота:
    1. Введите имя бота (может быть любое, затем можно отредактировать)
    2. Введите логин бота (должен быть уникальным и заканчиваться на _bot)
  5. Скопируйте токен вашего бота (под строчкой Use this token to access the HTTP API:).

Диалог создания бота

Установка библиотеки

Установите и настройте необходимую библиотеку Python для работы с телеграм, например aiogram или python-telegram-bot.

Установка aiogram

Запустите командный интерпретатор (в Windows — cmd.exe)

Наберите команду:

pip install aiogram

Как установить библиотеку Python Telegram Bot в Windows, Linux и MacOS:

  1. Windows:
    • Откройте командную строку или PowerShell.
    • Установите библиотеку с помощью команды: pip install python-telegram-bot
    • Подождите, пока процесс установки завершится.
  2. Linux:
    • Откройте терминал.
    • Установите библиотеку с помощью команды: pip install python-telegram-bot.
    • Подождите, пока процесс установки завершится.
  3. MacOS:
    • Откройте терминал.
    • Установите библиотеку с помощью команды: pip install python-telegram-bot
    • Подождите, пока процесс установки завершится.

После завершения установки библиотеки Python Telegram Bot вы можете использовать ее в своих проектах для создания телеграм-ботов.

Как установить библиотеку telethon

Windows:

  1. Откройте командную строку или PowerShell.
  2. Введите команду: pip install telethon.
  3. Нажмите клавишу Enter и дождитесь завершения установки.

Linux:

  1. Откройте терминал.
  2. Введите команду: pip install telethon.
  3. Нажмите клавишу Enter и дождитесь завершения установки.

MacOS:

  1. Откройте терминал.
  2. Введите команду: pip install telethon.
  3. Нажмите клавишу Enter и дождитесь завершения установки.

После завершения установки вы сможете использовать библиотеку Telethon в своих проектах для взаимодействия с API Telegram.

Обратите внимание, что для успешной установки библиотеки Telethon вам может потребоваться наличие Python и pip на вашей системе. Если они не установлены, вам следует установить их перед установкой библиотеки Telethon.

Реализация простого бота в aiogram

  1. Импортируйте необходимые модули и классы из выбранной библиотеки.
  2. Создайте экземпляр класса бота и передайте ему токен вашего бота:
    import aiogram  # Импортируйте модуль из выбранной библиотеки
    
    bot = aiogram.Bot(token='YOUR_BOT_TOKEN')  # Создайте экземпляр класса бота и передайте токен вашего бота
    
  3. Создайте экземпляр класса Dispatcher для обработки входящих сообщений и событий:
    dispatcher = aiogram.Dispatcher(bot)  # Создайте экземпляр класса Dispatcher и передайте экземпляр класса бота
    
  4. Определите обработчики для различных типов сообщений и событий:
    @dispatcher.message_handler()  # Обработчик для обычных сообщений
    async def handle_message(message: aiogram.types.Message):
        # Ваш код для обработки сообщения
        
    @dispatcher.callback_query_handler()  # Обработчик для inline-кнопок
    async def handle_callback_query(callback_query: aiogram.types.CallbackQuery):
        # Ваш код для обработки inline-кнопки
        
    # Добавьте другие обработчики по необходимости
    
  5. Запустите бота и начните обработку входящих сообщений и событий:
    async def main():
        await dispatcher.start_polling()  # Запустить бота для получения входящих сообщений и событий
    
    if __name__ == '__main__':
        aiogram.executor.start_polling(dp, skip_updates=True)  # Запустить основной цикл выполнения бота
    
  6. Запустите программу и ваш бот будет готов к работе.
    import aiogram
    
    bot = aiogram.Bot(token='YOUR_BOT_TOKEN')
    dispatcher = aiogram.Dispatcher(bot)
    
    @dispatcher.message_handler()
    async def handle_message(message: aiogram.types.Message):
        # Ваш код для обработки сообщения
        
    @dispatcher.callback_query_handler()
    async def handle_callback_query(callback_query: aiogram.types.CallbackQuery):
        # Ваш код для обработки inline-кнопки
        
    async def main():
        await dispatcher.start_polling()
    
    if __name__ == '__main__':
        aiogram.executor.start_polling(dp, skip_updates=True)
    

Пример простейшего бота на aiogram

import logging
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage

# Установка уровня логов для отладки
logging.basicConfig(level=logging.INFO)

# Инициализация бота и диспетчера
bot = Bot(token="YOUR_TELEGRAM_BOT_TOKEN")
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start_command(message: types.Message):
    # Отправка приветственного сообщения
    await message.answer("Привет! Я бот, который может отправить тебя на сайт Victor Komlev.")
    
    # Создание кнопки с ссылкой на сайт
    button = types.InlineKeyboardButton(text="Перейти на сайт", url="https://victor-komlev.ru")
    keyboard = types.InlineKeyboardMarkup().add(button)
    
    # Отправка кнопки пользователю
    await message.answer("Нажми на кнопку, чтобы перейти на сайт:", reply_markup=keyboard)

# Запуск бота
if __name__ == '__main__':
    from aiogram import executor
    executor.start_polling(dp, skip_updates=True)

После этого вы можете запустить бота, и он будет приветствовать пользователей и создавать кнопку, которая ссылается на указанный сайт.

Обратите внимание, что для работы этого кода необходима версия Python 3.7 или выше

Эхо-бот

Бот отвечает тем же сообщением, что и было отправлено. Кроме случая, когда отправлены слова cat, cats, puss. В этом случае, будет отправлена картинка, сохраненная в файле data\cats.jpg

TOKEN = "Ваш токен"

"""
This is a echo bot.
It echoes any incoming text messages.
"""

import logging

from aiogram import Bot, Dispatcher, executor, types


# Configure logging
logging.basicConfig(level=logging.INFO)

# Initialize bot and dispatcher
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)


@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
    """
    This handler will be called when user sends `/start` or `/help` command
    """
    await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.")


@dp.message_handler(regexp='(^cat[s]?$|puss)')
async def cats(message: types.Message):
    with open('data/cats.jpg', 'rb') as photo:
        '''
        # Old fashioned way:
        await bot.send_photo(
            message.chat.id,
            photo,
            caption='Cats are here ?',
            reply_to_message_id=message.message_id,
        )
        '''

        await message.reply_photo(photo, caption='Cats are here ?')


@dp.message_handler()
async def echo(message: types.Message):
    # old style:
    # await bot.send_message(message.chat.id, message.text)

    await message.answer(message.text)


if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)
Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.