Создайте собственного весёлого чат-бота в Telegram с помощью Python: Пошаговое руководство 2023
1. Для начала убедитесь, что на вашем компьютере установлен Python.
2. Затем получите учетные данные для аутентификации Telegram API.
В начале вам нужно будет создать нового бота и получить его shiny API token. Не волнуйтесь, это очень просто! Просто пообщайтесь с ботом BotFather в Telegram, и он поможет вам с реализацией этого процесса. Следуйте этим шагам:
Пишем простого бота-администратора для Telegram на Python. Тестируем на жене
Создание своего собственного телеграм-бота является одним из увлекательных и полезных способов практического применения программирования. Я решил создать своего бота как вариант добавления нового увлекательного проекта в свой портфолио, а также для создания комфорта и удобства для пользователей, которые используют телеграм в своей повседневной жизни.
После анализа нескольких библиотек для создания телеграм-ботов, я выбрал библиотеку Telebot, которая предоставляет богатый набор инструментов для разработки функционально-насыщенных ботов.
Мой бот будет иметь функционал защиты от спама, возможность кикать пользователей с помощью команд, мутить, а также получать статистику. В этой статье подробно рассмотрим функционал моего бота и как я использовал библиотеку Telebot для его создания.
Тестировать бота мы будем с помощью моей жены.
Библиотека Telebot для телеграм ботов на Python предоставляет ряд основных функций:
- TeleBot(token) – конструктор класса, который принимает токен вашего бота.
- send_message(chat_id, text) – отправляет сообщение пользователю с указанным chatid .
- sendphoto(chatid, photo) – отправляет фотографию пользователю с указанным chatid.
- send_audio(chat_id, audio) – отправляет аудио файл пользователю с указанным chatid .
- senddocument(chatid, document) – отправляет документ пользователю с указанным chatid .
- send_video(chat_id, video) – отправляет видео пользователю с указанным chatid .
- sendlocation(chatid, latitude, longitude) – отправляет геопозицию пользователю с указанным chatid .
- reply_to(message, text) – отправляет ответ на сообщение.
- edit_message_text(chat_id, message_id, text) – редактирует текст сообщения.
- delete_message(chat_id, message_id) – удаляет сообщение.
- get_updates() – получает все обновления.
- get_chat_member(chat_id, user_id) – получает информацию о пользователе в конкретном чате.
- get_chat(chat_id) – получает информацию о чате.
Начнем с импорта необходимых библиотек.
import telebot # сама библиотека telebot
import time # необходим для cрока /mute и автоматического размута после срока мута
Создаем строчку для вписания токена бота, который можно получить от https://t.me/BotFather и так же создаем сам объект бота
bot = telebot.TeleBot(‘TOKEN’) # в TOKEN мы вводим непосредственно сам полученный токен.
Затем определяем словарь для хранения статистики чата.
Далее идут обработчики команд:
- команда /start выводит приветственное сообщение.
- команда /help выводит список доступных команд.
Словарь для хранения статистики:
Обработчик команды /start:
@bot.message_handler(commands=['start']) def start(message): bot.reply_to(message, "Привет! Я бот для управления чатом. Напиши /help, чтобы узнать, что я умею.")
Обработчик команды /help:
@bot.message_handler(commands=['help']) def help(message): bot.reply_to(message, "/kick - кикнуть пользователя\n/mute - замутить пользователя на определенное время\n/unmute - размутить пользователя\n/stats - показать статистику чата\n/selfstat - показать свою статистику")
Обработчик команды /kick:
В обработчике команды /kick проверяется, было ли оно использовано в ответ на сообщение пользователя. Если да, то определяется chat_id (идентификатор чата) и user_id (идентификатор пользователя), на которого нужно накинуть мут. Затем проверяется статус пользователя (администратор или нет). Если пользователь является администратором, то выводится сообщение, что кикнуть его невозможно. В противном случае кик происходит с помощью метода kick_chat_member() и выводится соответствующее сообщение.
@bot.message_handler(commands=['kick']) def kick_user(message): if message.reply_to_message: chat_id = message.chat.id user_id = message.reply_to_message.from_user.id user_status = bot.get_chat_member(chat_id, user_id).status if user_status == 'administrator' or user_status == 'creator': bot.reply_to(message, "Невозможно кикнуть администратора.") else: bot.kick_chat_member(chat_id, user_id) bot.reply_to(message, f"Пользователь был кикнут.") else: bot.reply_to(message, "Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите кикнуть.")

Обработчик команды /mute и /unmute:
Обработчик команды /mute ограничивает возможности отправки сообщений выбранного пользователя на определенное количество времени. Эта команда принимает аргумент — время в минутах, на которое нужно замутить (ограничить) пользователя. Если аргумент не указан, то устанавливается значение по умолчанию — 1 минута. Если аргумент был указан, то проверяется его корректность и максимальное значение (не больше 1 дня). Если время указано верно, то с помощью метода restrictchatmember() устанавливается ограничение на отправку сообщений пользователем на заданное время. В случае успеха выводится соответствующее сообщение.
Обработчик команды /unmute снимает мут с выбранного пользователя. При этом с помощью метода restrictchatmember() включаются все возможности пользователя для отправки сообщений. В случае успеха также выводится соответствующее сообщение.
Оба обработчика проверяют, было ли вызвано данная команда в ответ на сообщение пользователя. Если да, то определяются chatid (идентификатор чата) и userid (идентификатор пользователя), на которого нужно накинуть мут. Также проверяется статус пользователя (администратор или нет). Если пользователь является администратором, то выводится сообщение, что замутить его невозможно. Если команда использована без ответа на сообщение пользователя, которого нужно замутить/размутить, то выводится соответствующее сообщение.
Обработчик команды /mute:
@bot.message_handler(commands=['mute']) def mute_user(message): if message.reply_to_message: chat_id = message.chat.id user_id = message.reply_to_message.from_user.id user_status = bot.get_chat_member(chat_id, user_id).status if user_status == 'administrator' or user_status == 'creator': bot.reply_to(message, "Невозможно замутить администратора.") else: duration = 60 # Значение по умолчанию - 1 минута args = message.text.split()[1:] if args: try: duration = int(args[0]) except ValueError: bot.reply_to(message, "Неправильный формат времени.") return if duration < 1: bot.reply_to(message, "Время должно быть положительным числом.") return if duration >1440: bot.reply_to(message, "Максимальное время - 1 день.") return bot.restrict_chat_member(chat_id, user_id, until_date=time.time()+duration*60) bot.reply_to(message, f"Пользователь замучен на минут.") else: bot.reply_to(message, "Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите замутить.")


Обработчик команды /unmute:
@bot.message_handler(commands=['unmute']) def unmute_user(message): if message.reply_to_message: chat_id = message.chat.id user_id = message.reply_to_message.from_user.id bot.restrict_chat_member(chat_id, user_id, can_send_messages=True, can_send_media_messages=True, can_send_other_messages=True, can_add_web_page_previews=True) bot.reply_to(message, f"Пользователь размучен.") else: bot.reply_to(message, "Эта команда должна быть использована в ответ на сообщение пользователя, которого вы хотите размутить.")

3Обработчик команды /stats:
@bot.message_handler(commands=['stats']) def chat_stats(message): chat_id = message.chat.id if chat_id not in stats: bot.reply_to(message, "Статистика чата пуста.") else: total_messages = stats[chat_id]['total_messages'] unique_users = len(stats[chat_id]['users']) bot.reply_to(message, f"Статистика чата:\nВсего сообщений: \nУникальных пользователей: ")
Обработчик команды /selfstat:
@bot.message_handler(commands=['selfstat']) def user_stats(message): chat_id = message.chat.id user_id = message.from_user.id username = message.from_user.username if chat_id not in stats: bot.reply_to(message, "Статистика чата пуста.") else: if user_id not in stats[chat_id]['users']: bot.reply_to(message, "Вы еще не отправляли сообщений в этом чате.") else: user_messages = stats[chat_id]['users'][user_id]['messages'] total_messages = stats[chat_id]['total_messages'] percentage = round(user_messages / total_messages * 100, 2) bot.reply_to(message, f"Статистика для пользователя @:\nВсего сообщений: \nПроцент от общего количества сообщений: %")
Данный код содержит два обработчика команд: /stats и /selfstat для вывода статистики чата и статистики конкретного пользователя соответственно.
Обработчик команды /stats:

- Определяется chat_id текущего чата.
- Проверяется, есть ли статистика этого чата в словаре stats.
- Если статистика отсутствует, сообщается об этом.
- Если статистика есть, выводится общее количество сообщений в чате и количество уникальных пользователей по мнению бота.
Обработчик команды /selfstat:

- Определяется chat_id текущего чата и user_id отправителя сообщения.
- Проверяется, есть ли статистика этого чата в словаре stats.
- Если статистика отсутствует, сообщается об этом.
- Если статистика есть, проверяется, были ли сообщения отправлены пользователем в этом чате.
- Если пользователь не отправлял сообщений в чате, сообщается об этом.
- Если пользователь есть в статистике, выводится количество сообщений, отправленных данным пользователем в чат и процентное соотношение этого количества к общему количеству сообщений в чате.
Делаем защиту от спама по ключевым словам:
Список запрещенных слов:
bad_words = ['анкета', 'ссылка', 'уникальное предложение']
Функция для проверки наличия запрещенных слов в сообщении:
def check_message(message): for word in bad_words: if word in message.text.lower(): return True return False
@bot.message_handler(func=lambda message: True) def handle_message(message): # проверяем сообщение на наличие запрещенных слов if check_message(message): # если есть хотя бы одно запрещенное слово, кикаем пользователя bot.kick_chat_member(message.chat.id, message.from_user.id) bot.send_message(message.chat.id, f"Пользователь был удален из чата за использование запрещенных слов") else: # если запрещенных слов нет, обрабатываем сообщение дальше print(message.text)
Сначала в переменную badwords заносятся все запрещенные слова, которые будут использоваться для проверки сообщений.
Затем создается функция checkmessage , которая принимает сообщение и проверяет наличие в нем любого из запрещенных слов. Если одно из запрещенных слов есть в сообщении, функция возвращает True, иначе — False.
Далее создается обработчик сообщений, который будет вызываться каждый раз, когда пользователь отправляет сообщение в чат. В нем используется лямбда-функция, которая всегда возвращает значение True , т.е. она будет обрабатывать все сообщения.
С помощью функции checkmessage проверяется каждое сообщение на наличие запрещенных слов. Если в сообщении есть запрещенное слово, то бот кикает пользователя, отправляет сообщение о причине кика и завершает обработку сообщения. Если запрещенных слов нет, то бот просто выводит сообщение в консоль.

И еще одна важная строчка:
Эта строчка запускает бота в бесконечном режиме ожидания новых сообщений от пользователей. Метод bot.infinity_polling() является альтернативой методу bot.polling() и запускает бота в режиме бесконечного ожидания новых сообщений. Это значит, что бот будет постоянно проверять наличие новых сообщений и обрабатывать их. Параметр none_stop=True указывает на то, что бот будет продолжать работать даже в случае ошибок или проблем с подключением. Это важно, чтобы бот всегда был доступен для пользователей и мог обрабатывать их запросы.
Заключение
Бот, созданный в рамках данной статьи, является прекрасным примером простого, но полезного бота для управления чатом в Telegram. Кроме того, такой бот может быть использован для сбора статистических данных и аналитики сообщений в чате. Для этого можно реализовать дополнительную функцию /stats, которая будет отображать различные статистические данные, например, количество сообщений за день/неделю/месяц, наиболее активных пользователей и т.д. Для обработки и анализа данных можно использовать библиотеку Pandas, которая предоставляет мощные инструменты для работы с табличными данными и статистическим анализом.
Как самостоятельно сделать бота в «Телеграме» без навыков программирования

«Телеграм» — самое быстрорастущее приложение 2022 года в России.
За последние шесть месяцев суточная аудитория мессенджера выросла на 66%. Теперь и новые пользователи, и пришедший вслед за ними бизнес знакомятся с одной из главных особенностей «Телеграма» — тысячами местных ботов.
Ботов делают все: команда мессенджера, компании, обычные люди. Они популярны и на рынке разработки: на платформе Kwork более тысячи фрилансеров предлагают создать бота. Цены разные: от 500 до 500 тысяч рублей в зависимости от сложности задачи. Далеко не все готовы тратить такие деньги или изучать программирование ради создания бота. Поэтому появилось множество платформ, освоение которых не требует особых навыков.
Я узнал, как бесплатно создать телеграм-бота , и попробовал самостоятельно сделать это в разных ноукод-сервисах. Но для тех, кто разбирается в программировании, есть бонусный раздел: там я при помощи разработчика Ильи Гринзовского пошагово рассказываю о создании небольшого бота на Python.
Что вы узнаете из материала
ПАРТНЕРСКИЙ МАТЕРИАЛ
Я заработала 100 000 рублей на Tinkoff Black
Узнайте, как повторить этот опыт и оформить карту

Хочу знать
Какие бывают телеграм-боты
Телеграм-боты — это мини-программы внутри мессенджера, которые управляются текстовыми командами в чате по принципу «вопрос — ответ». Подобная технология была еще в «Аське» конца нулевых: боты присылали анекдоты, гороскопы, статьи из «Википедии» и переводили тексты.
С 2015 года любой пользователь может сделать собственного бота в «Телеграме». Со временем они становились все сложнее и функциональнее: с помощью ботов можно управлять сообществами, бронировать места в кафе, переводить тексты и войсы, скачивать файлы, обрабатывать платежи. Некоторые даже используют нейросети: например, ruDALL-E Malevich от «Сбера» генерирует картинку по описанию, которое можно отправить прямо в чат.

В апреле 2022 года команда «Телеграма» представила второе поколение ботов: разработчики получили средства для полноценных интерфейсов на JavaScript внутри мессенджера. Такие боты уходят от стандартной модели «вопрос — ответ в чате» и заменяют целые сайты. Вот как это выглядит в тестовом приложении для заказа еды.

Пока это только демоверсия, но она уже показывает возможности нового поколения ботов
Ботов можно разделить на несколько категорий.
Классические чат-боты. Программы, которые ведут диалог с пользователем. Виртуальный собеседник обычно реагирует на заранее прописанные фразы, темы и команды. Так можно, к примеру, оптимизировать штат людей-операторов. Другие чат-боты пытаются имитировать человеческую беседу, но пользы от них не так много.
Помощники в администрировании. Пригодятся владельцам каналов и групповых чатов. Умеют собирать статистику, добавлять к постам реакции, URL-кнопки , файлы, создавать отложенные публикации, как ControllerBot. Или отслеживать активность в чате, выдавать предупреждения и настраивать антиспам-фильтры — это умеет Combot.
Магазины. Компании переносят свои каталоги в мессенджер — для тех, кому проще выбрать товар и оплатить его прямо в «Телеграме». Например, через Baggins можно купить чашку кофе, а через G_Shop — женскую одежду. Главный минус таких магазинов — запутанный интерфейс: сложно просмотреть все товары и собрать корзину.
Инструменты. Разнообразные боты, которые добавляют мессенджеру новые функции. Они позволяют читать электронные письма, как Gmail Bot, отслеживать цены на билеты, как AviasalesBot, или проверить свой заказ в боте СДЭКа. Еще они напоминают о штрафах, скачивают файлы по URL и распознают музыку по аудиосообщению.
Как создать телеграм-бота на Python: инструкция
Наверняка вам уже приходилось сталкиваться с ботами в Telegram. Боты помогают автоматизировать рутинные задачи как для обычных пользователей (например, боты-планировщики или боты для учета финансов), так и для компаний. Последние могут использовать ботов-рекламщиков, которые занимаются рассылками по клиентской базе, ботов-ассистентов, которые выполняют роль технической поддержки, и так далее.
В этой инструкции опишем процесс создания бота в Telegram на Python . В качестве примера создадим Telegram-бот компании Timeweb Cloud, который будет приветствовать пользователя и предлагать ему перейти на сайт компании.
Как создать бота в Telegram на Python пошагово
Шаг 1. Регистрация бота в BotFather
В первую очередь зарегистрируйте бота в Telegram. Для этого введите в поисковой строке мессенджера @BotFather и перейдите к нему, как это показано на картинке ниже.
После нажмите кнопку «Запустить» в нижней части окна и выберите в открывшемся списке команду /newbot . Бот предложит указать имя создаваемого бота. В нашем случае укажем TimewebCloudBot, и его же продублируем в качестве короткого имени.
После этого бот будет создан.
Надежно сохраните токен бота — в будущем он понадобится для авторизации и работы с ботом.
Шаг 2. Подготовка необходимых компонентов
Переходим к подготовке необходимых компонентов. На вашем компьютере должен быть установлен Python и среда разработки (в нашем случае это PyCharm).
Установить Python на Windows 10 можно по нашей инструкции, а после скачать PyCharm с сайта разработчика и установить его.
В качестве библиотеки мы будем использовать pyTelegramBotAPI . Установить ее можно, с помощью следующей команды:
pip install pyTelegramBotAPI
Все необходимые компоненты установлены. Переходим к следующему шагу.
Шаг 3. Написание кода
В первую очередь подключите установленную библиотеку и уникальный токен, о котором мы говорили выше, а также импортируйте типы, которые потребуются для работы кнопок (о них расскажем немного позже).
import telebot
botTimeWeb = telebot.TeleBot('Уникальный токен')
from telebot import types
Вместо Уникальный токен укажите токен, который вы получили при регистрации бота. Кавычки необходимо сохранить.
Теперь реализуем так называемые обработчики сообщений. Они отвечают за фильтрацию входящих сообщений бота и вызов указанной функции для этих сообщений.
С помощью кода ниже реализуйте команду /start , которая будет отвечать за запуск бота:
@botTimeWeb.message_handler(commands=['start'])
def startBot(message):
first_mess = f" , привет!\nХочешь расскажу немного о нашей компании?"
markup = types.InlineKeyboardMarkup()
button_yes = types.InlineKeyboardButton(text = 'Да', callback_data='yes')
markup.add(button_yes)
botTimeWeb.send_message(message.chat.id, first_mess, parse_mode='html', reply_markup=markup)
Разберем написанный выше код по порядку.
Первые две строчки объявляют метод обработки входящих сообщений. В нашем случае в качестве параметра передается команда /start .
Далее объявляется переменная first_mess , хранящая указанную строку. Она будет отображаться пользователю после вызова команды /start . Здесь также используется объект Message , необходимый для определения имени ( first_name ) и фамилии ( last_name ) пользователя.
Далее следуют 3 строчки кода, отвечающие за добавление кнопки, которая в будущем будет перенаправлять пользователя на следующее сообщение. Тип данной кнопки — Inline. Это значит, что такая кнопка будет отображаться прямо под сообщением. Для ее создания необходимо использовать метод InlineKeyboardButton . Параметр text отвечает за имя кнопки, а callback_data — за возвращаемую строку при нажатии. Второй параметр понадобится для реализации функционала кнопки.
И наконец, добавляется метод send_message , необходимый для отправки сообщения пользователю. У него указаны 4 параметра:
- message.chat.id отвечает за синхронизацию сообщения с чатом бота;
- first_mess передает ранее указанное сообщение;
- parse_mode необходим для указания режима разметки сообщений;
- reply_markup отвечает за добавление созданной кнопки.
Сейчас кнопка создана, но при ее нажатии ничего не происходит. Необходимо реализовать её функционал. Для этого используем следующий фрагмент кода:
@botTimeWeb.callback_query_handler(func=lambda call:True)
def response(function_call):
if function_call.message:
if function_call.data == "yes":
second_mess = "Мы облачная платформа для разработчиков и бизнеса. Более детально можешь ознакомиться с нами на нашем сайте!"
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("Перейти на сайт", url="https://timeweb.cloud/"))
botTimeWeb.send_message(function_call.message.chat.id, second_mess, reply_markup=markup)
botTimeWeb.answer_callback_query(function_call.id)
В начале объявляется метод для обработки запросов обратного вызова. Выполняется проверка на соответствие строки, указанной после == и возвращенной после нажатия кнопки. Так как ранее мы указали значение параметра callback_data = ‘yes’ , то проверка пройдет успешно.
После проверки реализован функционал кнопки. Переменная second_mess хранит текст ответного сообщения. А далее описана реализация кнопки, которая хранит ссылку на сайт компании Timeweb Cloud.
Последним шагом будет указать боту на то, что обработка команды закончена. Для этого указываем команду answer_callback_query .
После всех методов необходимо добавить последнюю строчку, которая отвечает за непрерывное продолжение работы бота:
botTimeWeb.infinity_polling()
Бот создан. Сохраните файл с кодом и переходите к его запуску.
Шаг 4. Запуск бота
Откройте терминал и выполните запуск проекта:
python main.py
Теперь бот запущен, можно переходить в Telegram и тестировать его.
Для дополнительной безопасности и стабильности рекомендуется запускать бота на виртуальном сервере. Арендовать надежный облачный сервер можно на Timeweb Cloud .
Шаг 5. Тестирование бота
Откроем Telegram и перейдем к созданному боту, используя поиск и короткое имя, которое указывалось на первом шаге.
Для начала работы нажмем «Запустить» внизу экрана.
Бот обработает команду и выведет приветственное сообщение.
Для продолжения работы с ботом нажмем кнопку под сообщением.
Бот среагирует на нажатие кнопки и выведет следующее сообщение. Под ним также отображается кнопка, которая содержит ссылку на сайт компании. Проверим ее работоспособность.
В ответ на нажатие кнопки бот предложит перейти по ссылке. Нажимаем «Перейти» и переходим на сайт компании.
Заключение
Мы рассмотрели, как создать бота в Telegram на Python пошагово — от его регистрации до запуска. Вы можете не останавливаться на достигнутом, а подробно изучить возможности используемой библиотеки и продолжить наполнять свой первый бот необходимым функционалом.
