Telebot, python, в двух файлах .py, как объединить их работу?
Подскажите пожалуйста, не силен в telebot, увы(, учусь, возможно ли разнести бота в два и более .py модуля(файла). Например — есть основной файл main_test.py — в нем стартовое меню с кучей кнопок (в образце 2 кнопки — button и button_1, но их будет c пару дюжин). При нажатии любой из кнопок хотелось бы запускать свой .py файл со своими дальнейшими кнопками — запросами различных данных от пользователя (напр. дата рождения, локация, еще какие-то цифры (набор в каждой кнопке разный будет) и обрабатывающими их математически, и отдающими конечный результат, т.е. бот большой оч получается, большое количество разных меню/кнопок, сотни строк, путаница, поэтому хотелось бы разнести его функции в разные .py файлы. В образце после вывода стартового меню — бот уходит на последний @bot.callback_query_handler (а он во втором файле) и больше не видит button который в main_test.py, кнопка button не работает, а button_1 (второй файл) — работает. М.б есть какое-то решение, чтобы оба файла, все кнопки были рабочие всегда? Заранее благодарю за любую помощь! main_test.py:
import mytoken import telebot import mod1_test # импорт второго .py файла со своей структурой/кнопками и прочим. from telebot import types bot = telebot.TeleBot(mytoken.TOKEN) mod1_test.register_commands(bot) # знакомим бота с функцией во втором .py файле с кнопками kb = types.InlineKeyboardMarkup(row_width=2) # стартовая клавиатура bt = types.InlineKeyboardButton('button', callback_data='button') bt1 = types.InlineKeyboardButton('button_1', callback_data='button_1') kb.add(bt, bt1) @bot.message_handler(commands=['start']) # старт, получаем 2 кнопки - button и button_1 def start(message): bot.send_message(message.chat.id, 'Select:', reply_markup=kb) @bot.callback_query_handler(func=lambda callback: callback.data) def otvet(callback): if callback.data == 'button': bot.answer_callback_query(callback.id) bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id, text='tut eschcho pusto') bot.polling()
доп файл, mod1_test.py:
def register_commands(bot): @bot.callback_query_handler(func=lambda callback: callback.data) def otvet_1(callback): if callback.data == 'button_1': bot.answer_callback_query(callback.id) bot.edit_message_text(chat_id=callback.message.chat.id, message_id=callback.message.id, text='начинаем запрашивать данные от пользователя, обрабатывать их и даем результат обработки')
Объясните суть FILE ID в Телеграм?
Телеграм рекомендует использовать file id файлов, которые уже были загружены на их сервер для того, чтобы не загружать повторно одни и те же файлы.
Так вот. У меня есть бот, при нажатии на кнопку он отправляет фотографию, которая давно загружена на сервер Телеграм. Я узнал file_id этой фотки и вписал в код бота
if message.text == «Фото»:
bot.send_photo(message.chat.id, «FILEID»)
Но, непонятно почему, у этой фотки которая выскакивает из бота при нажатии на кнопку, постоянно меняется file id. Я проверял.
Но почему, если фотка уже один раз загружена на сервер Телеграм?
- Вопрос задан более двух лет назад
- 3530 просмотров
Комментировать
Решения вопроса 1
soremix @SoreMix Куратор тега Python
Предположу, что это просто связанно с различными техническими особенностями. Если посмотреть, то можно заметить, что отправля одно и то же изображение, в нем есть одинаковые части, которые и идентифицируют изображение. Остальное — может данные о сервере, где она загруженна / дата загрузки / последнего доступа / и другая любая скучная информация, которую захочет разработчик, ну либо что угодно другое.
Если переживаете о том, что file_id меняется и может перестать находить картинку спустя какое-то время — то все нормально, в данный момент телеграм говорят, что file_id — строка постоянная, так что файл никуда не пропадет, даже если file_id меняется при повторной загрузке / отправке
Can I count on file_ids to be persistent?
Yes, file_ids can be treated as persistent.
Ответ написан более двух лет назад
Нравится 2 3 комментария
TeleQuest123 @TeleQuest123 Автор вопроса
Ага. Да, да, в начале и в конце id фотки символы везде одинаковые и лишь незначительно меняются в середине. Возможно это данные которые, как Вы говорите, о последнем доступе и т.д.
Хорошо, но тоже самое происходит, если я загружаю фотку с собственного сервера, имею ввиду, если указываю относительный путь к файлу на своём сервере. Символы id в начале и в конце тоже одинаковые и лишь незначительно меняются в середине. Значит ли это, что Телеграм не загружает повторно мою фотку с моего сервера, а сделал это лишь однажды и при нажатии на кнопку бота, то фотка уже загружается с Телеграмовского сервера, а не с моего?
Это всё меня интересует, чтобы избежать лимитов на клики в Телеграме.
Спасибо Вам большое!

soremix @SoreMix Куратор тега Python
FNTSYhub, что такое лимиты на клике?
Если вы отправляете изображение с помощью send_photo через file_id, естественно, она загружается уже с сервера телеграма, вы же не вписываете путь до файла на вашем сервере.
Если вы загружаете фото боту через клиент, то так же можно увидеть, что id схожи, если отправлять одно и то же изображение, так что он берет уже копию с сервера и не сохраняет дубль у себя.
В общем-то, схема выглядит так:
Отправляете боту уникальное изображение, он присваивает ему file_id и сохранят на сервере для дальнейшей работы. Если отправляете это же изображение еще раз — он проверяет, не была ли загружена эта картинка ранее, если была — то в объекте Message уже будет такой же (почти) file_id, который ссылается на первоначальный.
TeleQuest123 @TeleQuest123 Автор вопроса
SoreMix, Читал на форумах, что существует лимит на клики в ботах. Типо, если сделать тысячу кликов и будет загружена в ленту тысячу раз одна и та же фотка с чужого сервера, то бот накрывается, так как Телеграму не нравится, что идёт нагрузка на их сервер, именно поэтому они рекомендуют использовать file id, чтобы один раз загрузился файл на их сервер, а потом в боте хоть миллион кликов можно делать.
Как создать бота в Telegram: большая инструкция

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

Освойте профессию
«Python-разработчик»
Что такое Telegram-бот?
Telegram — популярный мессенджер, позволяющий пользователям обмениваться сообщениями, видео, музыкой и файлами. Блогеры используют сервис для публикации своего контента, а бизнес — чтобы продавать товары и услуги. Кроме всего прочего, в Telegram есть возможность создавать собственных ботов — программы внутри мессенджера, автоматизирующие общение. У каждого бота есть уникальное имя, поэтому его можно легко найти в строке поиска Telegram. Также ботов можно добавлять в чаты и каналы, чтобы они выполняли роль модератора или администратора. С недавних пор Telegram-боты могут быть полноценными веб-приложениями с собственным пользовательским интерфейсом.
Python-разработчик
Освойте Python, самый популярный язык программирования
3 075 ₽/мес 6 150 ₽/мес

Какими бывают боты в Telegram
Возможности ботов ограничены только фантазией и навыками разработчиков, поэтому компании активно используют их для ежедневных задач.
Боты для автоматизации задач

Например, при помощи телеграм-бота можно автоматизировать запись на услуги в салон или к врачу и разгрузить администраторов. Бот может принять заявку в любое время суток, в выходные и праздники, а также и перенести информацию о записи в календарь компании.
Боты для продвижения и продаж
Бот может отвечать на вопросы клиентов, предлагать промокоды, рассказывать о новых продуктах. Telegram-бот здесь может взять на себя функцию социальных сетей, email-рассылки и продавца-консультанта.
Чатбот поможет в форме непринужденной беседы подвести клиента к покупке вашего продукта. Источник
Боты для общения и развлечения

Telegram-боты нужны не только для того, чтобы продавать. Они также могут помочь выбрать кино на вечер, предложить забавный тест или сгенерировать мем. Например, студенты Skillfactory разработали для Московского зоопарка Telegram-бот, который имитирует общение с манулом Тимофеем и предлагает поучаствовать в викторине.
Конструкторы для настройки ботов
Для создания простых ботов можно использовать сервисы-конструкторы. С их помощью получится реализовать наиболее частые сценарии использования: ответы на вопросы, выдачу информации по запросу и обработку данных пользователя. Такие сервисы не требуют знания программирования, их можно освоить за несколько часов. Популярные конструкторы для создания ботов Telegram: Manybot — сервис для создания ботов с помощью сообщений в чате. Подойдет для самых простых сценариев использования. У Manybot есть встроенная реклама и нет возможности отключить ее с помощью подписки; botmother — редактор ботов, который умеет работать не только с Telegram, но и с другими популярными мессенджерами. Есть возможность обрабатывать медиа, файлы и обращаться к сторонним сервисам. PuzzleBot — мощный конструктор, позволяющий создать бота практически любой сложности и без единой строчки кода. При этом важно понимать основы программирования: переменные, циклы и условия. Есть премиальная версия по подписке.

Станьте разработчиком на Python и решайте самые разные задачи: от написания кода до автоматизации процессов
Какие технологии нужны, чтобы создать чат-бота в Telegram с нуля?
Если от бота нужны нестандартные сценарии использования или в проекте важно полностью контролировать поведение и обработку данных, то без программирования не обойтись. У Telegram открытое API с хорошей документацией, поэтому ботов можно разрабатывать практически на любом языке программирования, но удобнее использовать для этого уже готовые библиотеки. Разработчики Telegram активно развивают мессенджер, поэтому от библиотеки важно, чтобы она обновлялась так же часто и поддерживала все новшества сервиса. Ботов чаще всего пишут на Python из-за простоты и удобства этого языка. Для Python существуют следующие библиотеки для ботов Telegram: aiogram — комплексная библиотека с отличной документацией, поддержкой и активным сообществом. Есть русскоязычное сообщество разработчиков, которое поможет с трудностями и ответит на вопросы. Библиотека aiogram поддерживает асинхронность, работу с машиной состояний и рассчитана на разработку сложных ботов с большим количеством ежедневных пользователей. Сейчас у aiogram две активные версии, и лучше сразу выбирать версию 3.0, которая пока находится в бете, но работает стабильно. Библиотека подразумевает глубокие знания Python и опыт в программировании, поэтому может быть сложной для начинающих; telebot (pyTelegramBotAPI) — библиотека для простых ботов с небольшим количеством пользователей, поддерживающая работу с основными методами Telegram API. С telebot сложнее организовать асинхронность и управлять большой нагрузкой, но новичкам в разы легче и приятнее с ней работать.
Читайте также Полезные библиотеки для Python: чем пользуются разработчики
В статье мы будем использовать библиотеку telebot и писать код на Python, поэтому нам понадобится редактор кода. Сейчас разработчики в основном используют один из двух редакторов: Visual Studio Code — бесплатный редактор кода от компании Microsoft с задатками полноценной среды разработки. VS Code можно использовать практически с любыми языками программирования и технологиями. Для этого компания предусмотрела маркетплейс плагинов, расширяющих возможности редактора. VS Code полностью бесплатный и доступен для Windows, macOS и Linux. PyCharm — полноценная среда разработки на Python от компании JetBrains. Более тяжеловесная, чем VS Code, и включает в себя дополнительные инструменты для профессиональной работы над большими проектами. Есть как бесплатная версия, так и продвинутая по подписке. Для разработки даже самых сложных ботов хватит возможностей бесплатной версии PyCharm.
Как создать своего бота в Telegram
Разработка Telegram-бота начинается с его создания в мессенджере. Для этого команда сервиса предусмотрела специального бота BotFather, через которого осуществляется управление другими ботами пользователя. Важно отметить, что BotFather доступен только под этим именем и оснащен синей галочкой верификации. Найти его можно через строку поиска или по ссылке.
После перехода в BotFather нажимаем на кнопку «Начать». В чат придет сообщение со списком всех команд, доступных в боте. Так как мы создаем нового бота, то нам нужна команда `/newbot`. Ее можно выбрать из списка или ввести с клавиатуры и отправить в чат.
После этого BotFather попросит ввести название бота, которое пользователи будут видеть в его профиле и списке своих чатов. Оно может быть любым, но должно передавать суть бота и его возможности. Мы разрабатываем бота для комплиментов, так его и назовем — «Комплименты».
Теперь нашему боту надо задать имя пользователя, по которому его можно будет найти в Telegram. В этом случае уже есть несколько правил оформления:
- имя бота должно заканчиваться словом `bot`: к примеру, `SuperBot` или `super_bot`. Это обязательное требование Telegram, чтобы пользователи могли отличать обычные профили от ботов. Исключение делается только для внутреннего BotFather, имя которого начинается с ключевого слова, а не заканчивается им;
- имя бота должно быть уникальным, а учитывая, что многие создают ботов ради эксперимента и не удаляют их, то найти подходящий свободный вариант может быть проблематично.
Исходя из всего этого, подбираем звучное имя, состоящее из ключевых слов, которые бы точно описывали его суть. Для экспериментов можно использовать просто набор символов. В нашем случае имя `compliment_bot` уже было занято, поэтому использовали `super_compliment_bot`. Получилось слишком длинно, но отражает суть.
После регистрации BotFather передаст нам токен для доступа к нашему боту и подскажет ссылки на официальную документацию по разработке ботов для Telegram. Важно запомнить, что токен надо держать в секрете. С его помощью можно полностью управлять ботом и сообщениями, которые он отправляет. Посторонние лица, не имеющие отношения к разработке вашего бота, не должны его знать.

Оформление бота
Бот создан, и его можно найти в строке поиска Telegram или по ссылке. Но в таком виде пользователю будет очень сложно понять, для чего нужен бот и какие задачи он выполняет. Поэтому оформим его, добавив описание, иконку и приветственное изображение.

Для этого опять откроем BotFather, введем команду `/mybots` и выберем из списка только что созданного бота. Перед нами откроется меню управления ботом.

Коротко о каждом пункте меню:
API Token — можно узнать токен, если потеряли его. Также можно отозвать имеющийся токен и сгенерировать новый, если кто-то все же узнал его и перехватил на себя управление ботом;
Edit Bot — меню редактирования бота, в котором можно изменить имя, добавить описание, иконку, приветственное изображение и команды;
Bot Settings — тут можно выдавать боту права на взаимодействия с сообщениями в групповых чатах и каналах, добавлять кнопки и включить инлайн-режим;
Payments — бот может принимать платежи, к примеру, можно предлагать его функции по подписке или продавать через него товары. В этом пункте меню можно подключить платежную систему для обработки платежей и банковский счет. Есть поддержка российских платежных систем;
Transfer Ownership — бот принадлежит пользователю, который его создал, но права на владение и управление можно передать с помощью этого пункта меню;
Delete Bot — если бот больше не нужен, то его можно удалить, освободив список свободных уникальных имен.
У нашего бота пока есть только название. Теперь зададим ему описание, которое будет видно в окне его профиля. Для этого в меню бота выбираем Edit Bot → Edit About и присылаем в чат короткое описание. После зададим расширенное описание, выводящееся в чате новым пользователям. Переходим в Edit Bot → Edit Description и присылаем текст.
Для узнаваемости боту надо установить иконку, которую будет видно в списке чатов пользователя. Для иконок есть ограничения:
- формат файла должен быть jpg или png;
- квадратное изображение не меньше 300×300px и не больше 1280×1280px. Лучше всего использовать изображения размером 500×500px;
- изображение надо отправить BotFather в виде фото, а не файла.
Также боту можно задать изображение с описанием его возможностей. Его будут видеть новые пользователи при переходе в чат. Можно использовать картинки размером 640×360px или гифки 320×120px/640×360px. На таком изображении можно тезисно указать возможности бота и оставить QR-код с ссылкой на сайт компании или разработчика для пользователей, которые используют настольную версию Telegram.
Иконку бота можно задать, перейдя в Edit Bot → Edit Botpic, а изображение-описание — Edit Bot → Edit Description Picture. После настройки наш Telegram-бот выглядит так:

Начинаем программировать
Теперь у нас есть готовый оформленный бот, который ничего не умеет. Если открыть и запустить бота командой `/start` или кнопкой, то ничего не произойдет. Поэтому надо его оживить и научить обрабатывать сообщения от пользователя. Наш бот будет присылать в чат случайный комплимент из собственной коллекции.
Сперва надо установить среду разработки. В этой статье будем использовать PyCharm от JetBrains. Скачать установочный файл можно с официального сайта разработчика. Скачать и установить Python можно с официального портала. Проверить установленную версию Python можно с помощью следующей команды:

При создании бота мы будем в основном работать с библиотекой telebot. Поэтому ее надо установить. Заходим в PyCharm и создаем новый проект с названием `bot`. PyCharm создаст необходимое окружение, в котором мы установим библиотеку. Для этого надо открыть вкладку Terminal в редакторе кода и ввести команду `pip install pyTelegramBotAPI` для Windows или `pip3 install pyTelegramBotAPI` для macOS.
В папке проекта должен был автоматически появиться файл `main.py`. Если этого не произошло, то создаем его сами. Теперь научим нашего бота здороваться. Для этого в файле `main.py` импортируем `telebot`, создадим переменную `token` с нашим токеном и передадим его экземпляру бота.
import telebot # Импортируем telebot token = ('Ваш токен') bot = telebot.TeleBot(token)
Теперь создадим хендлер для обработки команды `/start`. Хендлер (Heandler) или обработчик — функция, которая вызывается в ответ на наступление определенного события. В случае с Telegram хендлер запускает функцию при получении сообщения.
В самом хендлере создадим функцию `start_message` с текстом сообщения, которым бот будет отвечать на полученную команду. Нам нужно бесконечное выполнение кода, чтобы бот работал всегда и был доступен в любое время суток. Поэтому завершим все строкой `bot.polling(none_stop=*True*, interval=0)`, которая будет запускать бесконечное выполнение.
import telebot # импортируем telebot # передаём значение переменной с кодом экземпляру бота token = ('Ваш токен') bot = telebot.TeleBot(token) # хендлер и функция для обработки команды /start @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, "Привет ✌️") # бесконечное выполнение кода bot.polling(none_stop=True, interval=0) Встроить код
Сейчас можно попробовать запустить код в PyCharm и открыть бота в Telegram. Если отправить ему команду `/start`, то он ответит сообщением, которое мы передали ему в коде. Бот работает, значит, можно наращивать его возможности.

Сейчас токен бота находится в одном файле с его кодом. Такой подход можно применять в разработке, но если надо будет поделиться кодом с кем-то или опубликовать его на GitHub, то токен надо будет удалять и тратить на это время. А еще можно просто забыть удалить токен, и тогда безопасность бота будет под вопросом.
Поэтому создадим в папке проекта файл `secrets.py` и в файле инициализируем словарь с ключом `BOT_API_TOKEN` и самим токеном в виде значения ключа.
secrets = Встроить код
Теперь вернемся к файлу `main.py`, импортируем словарь из файла `secrets.py` и сделаем так, чтобы токен подтягивался из файла, а не находился в коде.
import telebot # импортируем telebot from secrets import secrets # импортируем словарь с токеном из файла secrets.py # передаём значение переменной с кодом экземпляру бота token = secrets.get('BOT_API_TOKEN') bot = telebot.TeleBot(token) # хендлер и функция для обработки команды /start @bot.message_handler(commands=['start']) def start_message(message): bot.send_message(message.chat.id, "Привет ✌️") # бесконечное выполнение кода bot.polling(none_stop=True, interval=0)
Снова запускаем код и проверяем. Бот продолжает отвечать на команду `/start`, но в его коде уже нет токена. Поэтому можно спокойно делиться файлом `main.py` и не бояться за безопасность.
Разработчики могут встраивать кнопки для удобного общения с Telegram-ботами. Воспользуемся этой возможностью и создадим несколько кнопок для автоматической отправки команд. Нам потребуется определение типов сообщений, поэтому для этого импортируем `types` из `telebot`. Часть с импортами в коде будет выглядеть так:
import telebot # импортируем telebot from secrets import secrets # импортируем словарь с токеном из файла secrets.py from telebot import types # для определения типов
Теперь перепишем хендлер для обработки команды `/start`. Он будет не только отправлять приветственное сообщение, но и инициализировать кнопки бота. В нашем боте две кнопки: «Старт» будет выводить краткую инструкцию по использованию бота, а «Комплимент» — присылать приятное сообщение из коллекции. Сами кнопки украсим эмодзи.
Вместе с этим заменим текст приветственного сообщения. Будем обращаться к пользователю по имени. Мы не можем знать имен всех пользователей, но их знает Telegram, поэтому спросим у него с помощью конструкции « . Весь код хендлера выглядит так:
# хендлер и функция для обработки команды /start @bot.message_handler(commands=['start']) def start_message(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) start_button = types.KeyboardButton(" Старт") action_button = types.KeyboardButton(" Комплимент") markup.add(start_button, action_button) bot.send_message(message.chat.id, text="Привет, \nВоспользуйся кнопками".format(message.from_user), reply_markup=markup)

Бот обзавелся красивыми кнопками, но если попробовать нажать на них, то ничего не произойдет. Исправим это, дописав функции для ответа. Кнопка в Telegram просто отправляет в чат то, что на ней написано. Поэтому надо научить бота анализировать полученные сообщения и отвечать на сообщения-триггеры.
Для начала создадим коллекцию комплиментов в отдельном файле `compliments.py`:
compliments = ('Выглядишь лучшее всех!', 'Сегодня будет замечательный день!', 'Ты обязательно всё сможешь!', 'Я не встречал людей добрее тебя!', 'С тобой приятно проводить время!',)
После этого импортируем файл и модуль для работы со случайными числами:
import random # для выбора случайного комплимента from compliments import compliments # коллекция комплиментов
Теперь можно приступать к созданию хендлера для обработки кнопок. В условии будем отслеживать, какой текст пришел от пользователя. Если встречаем « Старт», то выводим краткое описание возможностей, если « Комплимент» — присылаем случайное сообщение из коллекции. На все остальные сообщения будем отвечать просьбой воспользоваться кнопками. Весь код хендлера выглядит так:
# хендлер для обработки нажатий кнопок @bot.message_handler(content_types=['text']) def buttons(message): if (message.text == " Старт"): bot.send_message(message.chat.id, text="Я могу поддержать тебя и поднять настроение. Просто попроси об этом") elif (message.text == " Комплимент"): bot.send_message(message.chat.id, text=f"") else: bot.send_message(message.chat.id, text="Я могу отвечать только на нажатие кнопок")

Бот готов, исправно работает, отвечает на сообщения и присылает в чат случайные комплименты из собственной коллекции, а его полный код выглядит так:
import telebot # импортируем telebot from secrets import secrets # словарь с токеном из файла secrets.py from telebot import types # для определения типов import random # для выбора случайного комплимента from compliments import compliments # коллекция комплиментов # передаём значение переменной с кодом экземпляру бота token = secrets.get('BOT_API_TOKEN') bot = telebot.TeleBot(token) # хендлер и функция для обработки команды /start @bot.message_handler(commands=['start']) def start_message(message): # создаём кнопки бота markup = types.ReplyKeyboardMarkup(resize_keyboard=True) start_button = types.KeyboardButton(" Старт") action_button = types.KeyboardButton(" Комплимент") markup.add(start_button, action_button) # приветсвенное сообщение для команды /start bot.send_message(message.chat.id, text="Привет, \nВоспользуйся кнопками".format(message.from_user), reply_markup=markup) # хендлер для обработки нажатий кнопок @bot.message_handler(content_types=['text']) def buttons(message): if (message.text == " Старт"): bot.send_message(message.chat.id, text="Я могу поддержать тебя и поднять настроение. Просто попроси об этом") elif (message.text == " Комплимент"): bot.send_message(message.chat.id, text=f"") else: bot.send_message(message.chat.id, text="Я могу отвечать только на нажатие кнопок") # бесконечное выполнение кода bot.polling(none_stop=True, interval=0)
А полное дерево файлов в проекте выглядит так:
. └── bot/ ├── main.py ├── secrets.py └── compliments.py
Сейчас бот работает только в том случае, если код запущен на компьютере. Поэтому пользователи не могут получить к нему постоянный доступ. Для этого надо арендовать виртуальный сервер, загрузить на него код бота и запустить. В таком случае бот будет доступен в любое время и не будет зависеть от компьютера разработчика.
Как добавить функционал и настроить ответы для бота в Телеграме?
Это можно сделать в конструкторе или прописать при помощи кода. В последнем случае нужно создать бота в Telegram, а затем написать ему серверную часть: код, который при нажатии на определенную кнопку будет высылать конкретный ответ. Для этого нужно создать кнопки, библиотеку ответов и хендлеры, которые организуют связь между действиями пользователя и ответами бота.
Как опубликовать и запустить бота в Телеграме?
Чтобы бот заработал, нужно разместить написанный код на арендованном сервере и создать бот в мессенджере. Код будет отвечать за связь сервера с чатом в Telegram.
Как продвигать и увеличить популярность своего бота в Телеграме?
Расскажите о своем боте на сайте, в социальных сетях и в email-рассылке. Для тестового периода лучше привести в бот теплую аудиторию, которая вас уже знает и читает. Они могут попробовать бот, написать вам об ошибках. После этого можно заняться платной рекламой: купить ее у Telegram или обратиться к блогерам.
На каком языке лучше написать бота?
На любом, который вы знаете. Ботов можно писать на Python, C, Java. Чаще всего для этой задачи выбирают Python, потому что он прост в использовании.
Python-разработчик
Освойте Python с нуля. Подготовим к трудоустройству: дадим много практики, реальные проекты для портфолио, поможем с резюме. Лучшие студенты пройдут стажировки в проектах компаний-партнеров.
Телеграм-боты — это круто! Я научу вас создавать телеграм-бота без навыков программирования
Создание своего Telegram-бота — это замечательный способ попробовать себя в программирование на практике. Мы создадим собственного Telegram-бота с нуля. Мы рассмотрим каждый этап этого процесса. Создание бота — это не только интересный опыт, но и возможность принести пользу другим. Мы надеемся, что после прочтения этой статьи вы будете вдохновлены создать своего собственного бота
Telegram-боты могут выполнять различные задачи, от отправки уведомлений до автоматизации бизнес-процессов. Они могут быть полезны во многом:
— Автоматизация задач: Боты могут автоматизировать рутинные операции, что позволяет сэкономить время и силы.
— Взаимодействие с пользователями: Боты могут обеспечить простое и эффективное взаимодействие с вашими клиентами, подписчиками или пользователями.
— Уведомления и оповещения: Боты могут рассылать уведомления о важных событиях, например, новых постах в блоге или статусе заказа.
— Аналитика и сбор данных: Боты могут помочь в сборе данных и проведении анализа.
Почему телега — хороший выбор для созданий ботов, а не ватсап и т.п?
— Открытый API: Telegram предоставляет мощное API для разработчиков, что позволяет создавать ботов с широким спектром функционала. Для тех, кто не знает, что такое API(а все таки статья больше для новичков) — ознакомьтесь по этой ссылке.
— Большое сообщество: Сообщество разработчиков Telegram ботов активно и готово поддержать новичков.
— Множество пользователей: Telegram имеет огромное количество активных пользователей, что делает его отличной платформой для внедрения ботов.
В этой статье мы будем использовать Python в качестве языка программирования. Python – это популярный и простой в изучении язык, который отлично подходит для начинающих разработчиков. Он также обладает обширной библиотекой и фреймворками, которые делают разработку Telegram-ботов удобной и эффективной.
Для кого предназначена эта статья? На самом деле, она пригодится всем, даже если вы не имеете опыта в программировании. Мы начнем с основ и создадим простого Telegram-бота. После прочтения статьи вы сможете поэкспериментировать и улучшить бота.
Подготовка
Прежде чем мы начнем разрабатывать своего первого Telegram-бота, необходимо подготовить рабочее окружение и инструменты.
Python — это универсальный и мощный язык программирования, который отлично подходит для разработки Telegram-ботов. Если у вас уже установлен Python, убедитесь, что вы используете версию 3.8.1, так как она является наиболее актуальной на момент написания статьи.
Если Python у вас не установлен, вам следует сделать это. Для установки Python, посетите официальный сайт Python (https://www.python.org/) и загрузите установщик для вашей операционной системы. Запустите установщик и следуйте инструкциям на экране.
После установки Python, убедитесь, что pip (установщик пакетов Python) также установлен. Он обычно идет в комплекте с Python. Вы можете проверить его наличие, выполнив команду в терминале:
pip —version
Если pip у вас не установлен, вы можете установить его, следуя инструкциям на официальном сайте Python.
Далее мы установим библиотеку Telebot, которая позволит нам взаимодействовать с Telegram API. Откройте терминал или командную строку и выполните следующую команду:
pip install Telebot
С помощью этой команды мы загрузили библиотеку, с помощью которой будем создавать бота.
Также нам понадобится установить PyCharm для более удобного процесса создания бота.
Теперь, когда у нас есть Python и необходимая библиотека, давайте получим API-ключ Telegram BotFather. BotFather — это официальный бот Telegram, который позволяет создавать и настраивать новых ботов.
Шаги для получения API-ключа от BotFather:
- Откройте мессенджер Telegram и найдите бота BotFather (вы можете воспользоваться поиском).
- Напишите команду /newbot, чтобы создать нового бота.
- Выберите имя для вашего бота, и BotFather предложит вам уникальное имя пользователя для бота, заканчивающееся на «bot». Например, MyVcRuBot.
- Скопируйте полученный API-ключ. Он будет выглядеть примерно так: 1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst.
API-ключ Telegram BotFather – это ключевой элемент, который позволит вашему боту взаимодействовать с Telegram API. Не передавайте его никому и не размещайте в открытом доступе.
Настройка проекта
Настало время подготовить наш проект для разработки Telegram-бота. Создание правильной структуры проекта и организация файлов – это важный шаг, который поможет вам легче управлять вашим кодом и разрабатывать его в будущем.
Перед тем как начать писать код, создадим рабочую директорию для нашего проекта. Вы можете выбрать любое удобное для вас место на вашем компьютере. Важно, чтобы эта директория была хорошо структурирована и легко доступна.
Создайте новую директорию для проекта, например, «MyTelegramBot«. Она будет содержать все файлы и скрипты, связанные с вашим ботом.
Структурирование вашего проекта – это не просто хорошая практика, это ключевой элемент профессиональной разработки. Она обеспечит удобство управление, порядок и в целом хорошую организацию проекта, чтобы не искать по несколько часов один файлик с ботом.
Ваша рабочая директория должна содержать следующие элементы:
— main.py: Это основной скрипт вашего бота, в котором будет располагаться основная логика. Этот файл будет запускаться для работы вашего бота.
— config.py: В этом файле можно хранить конфигурационные настройки, такие как API-ключ Telegram BotFather и другие настройки, которые вы можете понадобиться.
— utils.py: Здесь можно размещать вспомогательные функции и классы, которые будут использоваться в основном скрипте.
— plugins/: Эта директория предназначена для хранения плагинов и модулей, которые вы создадите для вашего бота. Каждый плагин может предоставлять определенный функционал.
Пример директории:
В данной статье мы будем использовать только файлы main.py и config.py
Далее переходим в файлы config.py и main.py с помощью PyCharm
Написание кода
Для начала создадим заполним файл конфига, для того, чтобы вставить тут наш ключ API, ключ, который будет вызываться в основном файле бота.
API_KEY = «1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst» # обратите внимание, что API в двойных ковычках.
Если из текста выше не поняли, где взять API после общения с отцом ботов, то вот оно по стрелке:
Обратите внимание, что я замазал API в целях безопасности бота. В целом безопасность ботов это очень важная часть, заслуживающая отдельной статьи. Скоро я поделюсь ей в своем канале, жду тебя в нем по ссылке, в этом канале я помогаю обычным людям, не связанным с айти разобраться в нем, даже если не хотите связывать с Айти жизнь, айтишные навыки — важный софт скилл каждого человека 21 века.
Создаем базовую структуру бота
Создадим основной скрипт main.py, в котором будет находиться основная логика бота:
import telebot # импортировали библиотеку в наш код. from config import API_KEY # из файла конфиг вытащили наш API # Создаем экземпляр бота bot = telebot.TeleBot(API_KEY) # здесь мы обратились к файлу конфига и по сути вставили наш API в скобочки # Главный обработчик команды /start @bot.message_handler(commands=[‘start’]) def start(message): bot.send_message(message.chat.id, «Привет! Я твой Telegram-бот. Вот список доступных команд:\n/help — Помощь\n/prognoz — Прогноз дня») # Главный обработчик команды /help @bot.message_handler(commands=[‘help’]) def help(message): bot.send_message(message.chat.id, «Это бот, который может предоставить интересный прогноз на день. Попробуй команду /prognoz!») # Главный обработчик команды /prognoz, добавим функцию для добавления рандомного прогноза на день! @bot.message_handler(commands=[‘prognoz’]) def prognoz(message): # Здесь мы добавим код для генерации случайного прогноза на день pass # Обработчик всех входящих сообщений, т.е обработчик сообщений, которых нет в боте @bot.message_handler(func=lambda message: True) def echo_all(message): bot.reply_to(message, «Я не понимаю твоего сообщения. Попробуй команду /help для получения помощи.») # Запуск бота, бот будет работать не смотря на ошибки bot.infinity.polling()
Добавим код в обработчик команды /prognoz:
# Главный обработчик команды /prognoz @bot.message_handler(commands=[‘prognoz’]) def prognoz(message): # Здесь мы создадим забавную функцию для генерации прогноза на день import random phrases = [ «Сегодня твой день будет удачным!», «Ожидай непредвиденных сюрпризов.», «Сегодня тебя ждет встреча с интересным человеком.», «Будь осторожен на дороге, возможны неприятности.», «Задумайся над своими целями и планами.», «Сегодня — отличный день для новых начинаний.», «Подари себе минутку покоя и расслабления.», «Не забудь позвонить близким и сказать им о своей любви.», «Сегодня ты сможешь решить сложную задачу.», «Будь проще в общении с окружающими.», «Скоро наступит изменение в лучшую сторону.», «Подумай о своем здоровье и питании.», «Сегодня откроются новые горизонты для творчества.», «Уделите внимание своим близким.», «Не стоит переживать по пустякам.», «Сегодня удача будет на твоей стороне.», «Будь готов к неожиданным приключениям.», «Возможно, тебя ждет приятное событие.», «Сегодня — день для саморазвития.», «Никогда не поздно начать что-то новое.» ] random_phrase = random.choice(phrases) bot.send_message(message.chat.id, f»Прогноз на день:
Мы создали массив phrases, содержащий 20 случайных фраз, и затем выбираем одну из них случайным образом и отправляем пользователю в ответе.
Теперь у нас есть команда /prognoz, которая генерирует интересный прогноз на день.
Обработчик всех входящих сообщений, который мы определили как func=lambda message: True, будет выполняться для всех сообщений, которые не соответствуют другим командам. В нашем случае, он просто отправляет обратно стандартное сообщение «Я не понимаю твоего сообщения. Попробуй команду /help для получения помощи.»
Затестим:
для начала запустим бота по кнопке Run:
Теперь бот работает. Переходим в своего бота по ссылке от отца ботов и тестим команды:
Команда /start
Узнаем прогноз на день.
Даже сам бот говорит вам о том, что сегодня — отличный день для новых начинаний (честно, я не прописывал эту команду, чтобы получить именно это сообщение!).
Тестим обработчик неизвестных сообщений
Как-то так.. но не слишком ли просто? Слишком. Но перед тем, как улучшить этого бота, рассмотрим основные функции библиотеки Telebot, некоторые из которых вы уже увидели в коде, но их гораздо больше:
1. telebot.TeleBot(token) — Создание экземпляра бота.
— `token` (строка): API-ключ вашего бота.
2. @bot.message_handler(commands=[‘command_name’]) — Обработчик команды.
— `command_name` (строка): Имя команды, например, `/start`.
3. @bot.message_handler(func=lambda message: True) — Обработчик всех входящих сообщений.
— `func` (функция): Функция, которая определяет, должно ли сообщение быть обработано.
4. bot.send_message(chat_id, text) — Отправка текстового сообщения.
— `chat_id` (целое число): Идентификатор чата.
— `text` (строка): Текст сообщения.
5. bot.send_photo(chat_id, photo) — Отправка фотографии.
— `chat_id` (целое число): Идентификатор чата.
— `photo` (файл): Файл с изображением.
6. bot.reply_to(message, text) — Отправка ответа на сообщение.
— `message` (объект сообщения): Сообщение, на которое вы хотите ответить.
— `text` (строка): Текст ответа.
7. bot.edit_message_text(text, chat_id, message_id) — Редактирование текста сообщения бота. Например, можно использовать это так, если постараться: бот, который через час в своем сообщение показывает определенной код.
— `text` (строка): Новый текст сообщения.
— `chat_id` (целое число): Идентификатор чата.
— `message_id` (целое число): Идентификатор сообщения, которое нужно отредактировать.
8. bot.delete_message(chat_id, message_id) — Удаление сообщения. Т.е если бот админ в чате, он сможет удалить сообщение, по определенной команде. (рассмотрим позже).
9. bot.get_chat(chat_id) — Получение информации о чате.
10. bot.get_me() — Получение информации о боте.
11. bot.send_document(chat_id, document) — Отправка документа.
— `chat_id` (целое число): Идентификатор чата.
— `document` (файл): Файл с документом.
P.S Для всех последующих команд с отправкой файлов по правилам создания структуры бота, необходимо заводить отдельные папки под тип файла: documents, audio, video и т.д.
12. bot.send_audio(chat_id, audio) — Отправка аудиофайла.
— `chat_id` (целое число): Идентификатор чата.
— `audio` (файл): Файл с аудио.
13. bot.send_video(chat_id, video) — Отправка видеофайла.
— `chat_id` (целое число): Идентификатор чата.
— `video` (файл): Файл с видео.
14. bot.send_location(chat_id, latitude, longitude) — Отправка местоположения.
— `chat_id` (целое число): Идентификатор чата.
— `latitude` (десятичное число): Широта.
— `longitude` (десятичное число): Долгота.
15. bot.get_user_profile_photos(user_id) — Получение фотографий профиля пользователя.
— `user_id` (целое число): Идентификатор пользователя.
16. bot.send_sticker(chat_id, sticker) — Отправка стикера.
— `chat_id` (целое число): Идентификатор чата.
— `sticker` (файл): Файл со стикером.
with open(«sticker.webp», «rb») as sticker: bot.send_sticker(chat_id, sticker)
17. bot.send_chat_action(chat_id, action) — Отправка состояния чата.
Используйте этот метод, когда вам нужно сообщить пользователю, что что-то происходит на стороне бота. Статус устанавливается на 5 секунд или меньше (при поступлении сообщения от вашего бота клиенты Telegram очищают его статус набора). Telegram рекомендует использовать этот метод только в том случае, если ответ от бота будет ждать значительное время. (т.е у бота будет писаться печатает он или отправляет файл, как у обычного пользователя телеги).
18. bot.inline_handler(func) — Обработчик запросов встроенного режима. — `func` (функция): Функция, которая определяет, должен ли запрос быть обработан.
@bot.inline_handler(func=lambda query: len(query.query) > 0) def handle_inline_query(inline_query): # Обработка запроса встроенного режима
19. bot.answer_inline_query(inline_query_id, results) — Отправка результатов запроса встроенного режима. — `inline_query_id` (строка): Идентификатор запроса встроенного режима. — `results` (список объектов InlineQueryResult): Результаты запроса.
20. bot.add_handler(handler) — Добавление пользовательского обработчика.21. bot.remove_handler(handler) — Удаление пользовательского обработчика. К примеру можно сделать секретную команду, с помощью которой, админ бота сможет удалить команду. Но небольшое условие: после следующего запуска бота, эта команда будет вновь доступна. — `handler` (обработчик): Обработчик, который нужно удалить.
22. bot.polling(none_stop=True) — Запуск бота.
23. bot.stop_polling() — Остановка бота. Например, можно применить эту функцию при использования секретной команды от админа.
24. bot.set_webhook(url, certificate=None) — Установка вебхука для бота.
25. bot.remove_webhook() — Удаление вебхука
bot.remove_webhook()
Это все еще малая часть всех функций библиотеки. Вы можете ознакомиться со всеми функциями библиотеки по этой ссылке.
Итак, улучшим бота и добавим ему функции администрирования чата
Для улучшения бота и добавления команд для управления чатом, вы можете реализовать функции кика, мута и бана для пользователей. Эти функции могут быть полезными администраторам чата для поддержания порядка в чате:
Добавим команды для кика, мута и бана пользователей и автоматическое определение админа чата.
# Импортируем необходимые модули import telebot from telebot import types # Создаем экземпляр бота bot = telebot.TeleBot(API_KEY) # Определение админа чата def is_admin(chat_id, user_id): chat_member = bot.get_chat_member(chat_id, user_id) return chat_member.status in [«creator», «administrator»] # Команда для кика пользователя из чата @bot.message_handler(commands=[‘kick’]) def kick_user(message): if not is_admin(message.chat.id, message.from_user.id): bot.reply_to(message, «У вас нет прав для выполнения этой команды.») return user_id = message.text.split(» «)[1] # Пользователь указывает user_id после команды bot.kick_chat_member(message.chat.id, user_id) bot.send_message(message.chat.id, f»Пользователь с user_id
Этот код добавляет команды /kick, /mute и /ban для управления пользователями в чате. Он также проверяет, имеет ли пользователь права админа, прежде чем выполнять действия.
Еще библиотеки
aiogram: Еще один мощный и популярный фреймворк для разработки Telegram-ботов на Python. Он предоставляет более современный и асинхронный подход к созданию ботов и поддерживает функциональности, такие как работа с базами данных, состояниями и планированием задач.
GitHub: https://github.com/aiogram/aiogram
SQLAlchemy: Это мощная ORM библиотека для Python, которая предоставляет более высокий уровень абстракции для работы с базами данных. SQLAlchemy поддерживает множество различных баз данных и позволяет создавать сложные SQL-запросы и модели данных.
GitHub: https://github.com/sqlalchemy/sqlalchemy
Для добавления логирования в боте и отправки логов в чат, вы можете использовать библиотеку python-telegram-logger. Эта библиотека обеспечивает интеграцию логирования с Telegram и позволяет отправлять логи в чат вашего бота:
1. Установите библиотеку:
Вы можете установить python-telegram-logger с помощью pip:
pip install python-telegram-logger
2. Импортируйте и настройте библиотеку:
import logging from python_telegram_logger import TelegramHandler # Укажите API-ключ вашего бота и chat_id для отправки логов API_KEY = ‘YOUR_BOT_API_KEY’ CHAT_ID = ‘YOUR_CHAT_ID’ # Создайте объект логгера logger = logging.getLogger(‘my_logger’) logger.setLevel(logging.DEBUG) # Создайте обработчик TelegramHandler telegram_handler = TelegramHandler(API_KEY, CHAT_ID) # Добавьте обработчик к логгеру logger.addHandler(telegram_handler)
Здесь API_KEY — это API-ключ вашего бота, а CHAT_ID — идентификатор чата, в который будут отправляться логи.
Теперь вы можете использовать логгер для записи логов в вашем приложении. Логи будут автоматически отправляться в чат вашего бота:
logger.debug(«Это сообщение отладки») logger.info(«Информационное сообщение») logger.warning(«Предупреждение») logger.error(«Ошибка») logger.critical(«Критическая ошибка»)
Как только логи будут записаны, они будут отправлены в чат вашего Telegram-бота, что позволит вам мониторить их в реальном времени.
Создание собственного Telegram-бота — увлекательное и творческое занятие, которое может приносить не только удовольствие, но и пользу. Вы можете попробовать создать бота, облегчающего вашу жизнь или бота, для вашей жены ( например бот-таро ) или для ваших детей. Кстати, кодом бота-таро для своей жены я поделился в своем телеграм-канале.
Не забывайте экспериментировать, учиться и развиваться. Боты могут выполнять множество полезных задач.
Полезные ссылки для изучения создания Telegram-ботов:
1. Официальная документация Telegram Bot API: Официальная документация Telegram, которая предоставляет информацию о доступных методах API и примерах.
2. Небольшой курс по созданию телеграм бота на ютуб: Обучающий материал от Гоши Дударя о создании Telegram-ботов с использованием Python.
Подписывайтесь на мой Telegram-канал: ОбАйти
На моем Telegram-канале я делюсь интересными и актуальными материалами о мире IT, а также помогаю новичкам разбираться в айти. Присоединяйтесь, чтобы быть в курсе последних новостей и получать полезные советы.
Спасибо за ваше внимание!
