Как создать Telegram-бота с помощью библиотеки python-telegram-bot
Делимся инструкцией, как написать бота с помощью библиотеки python-telegram-bot за считанные минуты. На примере гайда от программиста Давида Мастроматтео.
Курс Project Manager.
Впроваджуйте покроковий алгоритм управління проєктами вже зараз. У цьому вам допоможе Павло Харіков — Head of IoT у Veon Group (Kyivstar).
Установка python-telegram-bot
Для создания бота понадобится пакет python-telegram-bot — оболочка для API от Telegram. Написать бота с помощью этой библиотеки очень просто, так как она полностью совместима с Python 3.6+.
Первое, что нужно сделать — установить python-telegram-bot. Вот ссылка на официальную документацию библиотеки .
$ pip install python-telegram-bot –upgrade
Создание бота
Теперь можно взяться за создание бота. Для этого даже не нужно писать код. Перейдите в Telegram и найдите канал @BotFather, который отвечает за регистрацию новых ботов. Начните общаться с ботом и введите команду /newbot . Затем BotFather спросит у вас имя и юзернейм.
Курс Финансовый директор.
Отримайте комплексне розуміння фінансової діяльності. Час підніматись по карʼєрним сходам.


У BotFather можно запросить много других интересных вещей. Например, изменить изображение профиля бота.
Теперь нужно принять важное решение: определиться с главной задачей бота. В этой инструкции мы сделаем бота, который предоставляет информацию о биоритмах пользователей . Будьте осторожны: речь идет о псевдонаучных теориях, так что б от будет такой же полезный, как и гороскопы. Но если дойдете до конца — сможете создавать любых ботов.
Освоить язык программирования Python вам могут помочь онлайн курсы от наших партнеров Mate Academy и Powercode. Получите качественный уровень знаний от практикующих специалистов.
Программирование бота
Пакет python-telegram-bot состоит из оболочки API Telegram. Этот инструмент доступен через telegram.Bot- классы. Помимо них, есть еще модуль telegram.ext , который значительно упростит работу.
Модуль telegram.ext содержит много классов, но самые важные — telegram.ext.Updater и telegram.ext.Dispatcher . Updater отвечает за выборку новых обновлений от Telegram. Также он передает их в Dispatcher , после чего они обрабатываются с помощью Handler .
Приступим к программированию:
# mastrobot_example.py from telegram.ext import Updater, CommandHandler, MessageHandler, Filters # function to handle the /start command def start(update, context): update.message.reply_text('start command received') # function to handle the /help command def help(update, context): update.message.reply_text('help command received') # function to handle errors occured in the dispatcher def error(update, context): update.message.reply_text('an error occured') # function to handle normal text def text(update, context): text_received = update.message.text update.message.reply_text(f'did you said "" ?') def main(): TOKEN = "insert here your token and don't share it with anyone!" # create the updater, that will automatically create also a dispatcher and a queue to # make them dialoge updater = Updater(TOKEN, use_context=True) dispatcher = updater.dispatcher # add handlers for start and help commands dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(CommandHandler("help", help)) # add an handler for normal text (not commands) dispatcher.add_handler(MessageHandler(Filters.text, text)) # add an handler for errors dispatcher.add_error_handler(error) # start your shiny new bot updater.start_polling() # run the bot until Ctrl-C updater.idle() if __name__ == '__main__': main()
В функции main создан класс Updater , который автоматически сгенерировал объект Dispatcher , доступный через .dispatcher- свойства класса Updater .
Добавьте несколько обработчиков:
-
команда /start вызывает функцию start() , которая отвечает пользователю информативным сообщением;
Курс QA Manual.
Успішна кар’єра в IT-сфері без необхідності глибоких знань програмування. Очікуйте заробітню плату в розмірі 600$ після завершення навчання.
Сейчас в коде прописаны функции обратного вызова, которые используют полученные данные для отправки сообщений пользователю.
Тестирование
Теперь можно протестировать бота. Запустите его.
Пошлите ему команду /start .
Ура, бот работает!
Но это не конец. Надо создать бота, который сообщает пользователю его ежедневный биоритм. Для этого следует применить команду /start . С ее помощью при запуске чата можно получить данные о дне рождения пользователя. Затем надо создать функцию для обработки новой команды /biorhythm , чтобы отправить ответ пользователю с его личным биоритмом.
Чтобы узнать день рождения пользователя, для начала нужно изменить функцию, обрабатывающую команду /start . Чтобы упростить задачу, попросите пользователя указать год, месяц и день рождения.
Курс UI/UX для геймдеву.
Під час навчання ви розробите проекти для портфоліо, що складається з 5 ключових аспектів UX/UI-дизайну, та отримаєш необхідні навички для професійного росту.
# function to handle the /start command def start(update, context): first_name = update.message.chat.first_name update.message.reply_text(f"Hi , nice to meet you!") start_getting_birthday_info(update, context)
В параметре update можно найти полезную информацию о пользователе, например, его имя.
В самом начале скрипта определите новую переменную STATE , которая нужна, чтобы понять, на какой вопрос отвечает пользователь.
STATE = None BIRTH_YEAR = 1 BIRTH_MONTH = 2 BIRTH_DAY = 3
Теперь необходимо реализовать функцию start_getting:_birthday_info() , она вызывается с помощью команды start() . После запуска вы получите информацию о дне рождения от пользователя.
def start_getting_birthday_info(update, context): global STATE STATE = BIRTH_YEAR update.message.reply_text(f"I would need to know your birthday, so tell me what year were you born in. ")
Для переменной STATE устанавливается значение BIRTH_YEAR , чтобы после ответа пользователя было понятно, что вопрос касался года рождения. Затем отправляется сообщение, чтобы узнать год рождения.
Теперь пользователь ответит обычным текстом, поэтому нужно изменить функцию text() .
def text(update, context): global STATE if STATE == BIRTH_YEAR: return received_birth_year(update, context) if STATE == BIRTH_MONTH: return received_birth_month(update, context) if STATE == BIRTH_DAY: return received_birth_day(update, context)
В функции text() необходимо понять, на какой вопрос отвечает пользователь, используя переменную STATE . После чего остается вызвать функцию для обработки каждого ответа.
Эти функции можно записать так:
def received_birth_year(update, context): global STATE try: today = datetime.date.today() year = int(update.message.text) if year > today.year: raise ValueError("invalid value") context.user_data['birth_year'] = year update.message.reply_text(f"ok, now I need to know the month (in numerical form). ") STATE = BIRTH_MONTH except: update.message.reply_text("it's funny but it doesn't seem to be correct. ") def received_birth_month(update, context): global STATE try: today = datetime.date.today() month = int(update.message.text) if month > 12 or month < 1: raise ValueError("invalid value") context.user_data['birth_month'] = month update.message.reply_text(f"great! And now, the day. ") STATE = BIRTH_DAY except: update.message.reply_text("it's funny but it doesn't seem to be correct. ") def received_birth_day(update, context): global STATE try: today = datetime.date.today() dd = int(update.message.text) yyyy = context.user_data['birth_year'] mm = context.user_data['birth_month'] birthday = datetime.date(year=yyyy, month=mm, day=dd) if today - birthday < datetime.timedelta(days=0): raise ValueError("invalid value") context.user_data['birthday'] = birthday STATE = None update.message.reply_text(f'ok, you born on ') except: update.message.reply_text("it's funny but it doesn't seem to be correct. ")
Когда получен год рождения пользователя, остается проверить, допустимое ли это значение. Если да, то оно сохраняется в словаре context.user_data[] . Продолжайте устанавливать значения для переменной STATE и задавать следующие вопросы.
Когда зададите последний вопрос и будете знать день рождения, создайте переменную даты и сохраните ее в context.user_data[] словаре.
Если пользователь вводит недопустимое значение, то получает ответ, что оно неверно. Значение переменной STATE не меняется, поэтому пользователь застревает на этом вопросе, пока не ответит правильно.
Получить новые знания в языке программирования Python вам могут помочь специальные курсы от Hillel и ШАГ . Получите качественный уровень знаний от практикующих специалистов.
Создание команды
Теперь нужно обработать команду /biorhythm .
Добавьте новый обработчик команд в функцию main() .
Напишите функцию расчета биоритма:
# This function is called when the /biorhythm command is issued def biorhythm(update, context): user_biorhythm = calculate_biorhythm( context.user_data['birthday']) update.message.reply_text(f"Phisical: ") update.message.reply_text(f"Emotional: ") update.message.reply_text(f"Intellectual: ") def calculate_biorhythm(birthdate): today = datetime.date.today() delta = today - birthdate days = delta.days phisical = math.sin(2*math.pi*(days/23)) emotional = math.sin(2*math.pi*(days/28)) intellectual = math.sin(2*math.pi*(days/33)) biorhythm = <> biorhythm['phisical'] = int(phisical * 10000)/100 biorhythm['emotional'] = int(emotional * 10000)/100 biorhythm['intellectual'] = int(intellectual * 10000)/100 biorhythm['phisical_critical_day'] = (phisical == 0) biorhythm['emotional_critical_day'] = (emotional == 0) biorhythm['intellectual_critical_day'] = (intellectual == 0) return biorhythm
В примере представлены две разные функции: одна для обработки команды, а другая для расчета биоритма. Таким образом удается разделить ответственность этих функций.
Полный код бота
# mastrobot_example2.py import datetime import math from telegram.ext import Updater, CommandHandler, MessageHandler, Filters STATE = None BIRTH_YEAR = 1 BIRTH_MONTH = 2 BIRTH_DAY = 3 # function to handle the /start command def start(update, context): first_name = update.message.chat.first_name update.message.reply_text(f"Hi , nice to meet you!") start_getting_birthday_info(update, context) def start_getting_birthday_info(update, context): global STATE STATE = BIRTH_YEAR update.message.reply_text( f"I would need to know your birthday, so tell me what year were you born in. ") def received_birth_year(update, context): global STATE try: today = datetime.date.today() year = int(update.message.text) if year > today.year: raise ValueError("invalid value") context.user_data['birth_year'] = year update.message.reply_text( f"ok, now I need to know the month (in numerical form). ") STATE = BIRTH_MONTH except: update.message.reply_text( "it's funny but it doesn't seem to be correct. ") def received_birth_month(update, context): global STATE try: today = datetime.date.today() month = int(update.message.text) if month > 12 or month < 1: raise ValueError("invalid value") context.user_data['birth_month'] = month update.message.reply_text(f"great! And now, the day. ") STATE = BIRTH_DAY except: update.message.reply_text( "it's funny but it doesn't seem to be correct. ") def received_birth_day(update, context): global STATE try: today = datetime.date.today() dd = int(update.message.text) yyyy = context.user_data['birth_year'] mm = context.user_data['birth_month'] birthday = datetime.date(year=yyyy, month=mm, day=dd) if today - birthday < datetime.timedelta(days=0): raise ValueError("invalid value") context.user_data['birthday'] = birthday STATE = None update.message.reply_text(f'ok, you born on ') except: update.message.reply_text( "it's funny but it doesn't seem to be correct. ") # function to handle the /help command def help(update, context): update.message.reply_text('help command received') # function to handle errors occured in the dispatcher def error(update, context): update.message.reply_text('an error occured') # function to handle normal text def text(update, context): global STATE if STATE == BIRTH_YEAR: return received_birth_year(update, context) if STATE == BIRTH_MONTH: return received_birth_month(update, context) if STATE == BIRTH_DAY: return received_birth_day(update, context) # This function is called when the /biorhythm command is issued def biorhythm(update, context): print("ok") user_biorhythm = calculate_biorhythm( context.user_data['birthday']) update.message.reply_text(f"Phisical: ") update.message.reply_text(f"Emotional: ") update.message.reply_text(f"Intellectual: ") def calculate_biorhythm(birthdate): today = datetime.date.today() delta = today - birthdate days = delta.days phisical = math.sin(2*math.pi*(days/23)) emotional = math.sin(2*math.pi*(days/28)) intellectual = math.sin(2*math.pi*(days/33)) biorhythm = <> biorhythm['phisical'] = int(phisical * 10000)/100 biorhythm['emotional'] = int(emotional * 10000)/100 biorhythm['intellectual'] = int(intellectual * 10000)/100 biorhythm['phisical_critical_day'] = (phisical == 0) biorhythm['emotional_critical_day'] = (emotional == 0) biorhythm['intellectual_critical_day'] = (intellectual == 0) return biorhythm def main(): TOKEN = "insert here your token and don't share it with anyone!" # create the updater, that will automatically create also a dispatcher and a queue to # make them dialoge updater = Updater(TOKEN, use_context=True) dispatcher = updater.dispatcher # add handlers for start and help commands dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(CommandHandler("help", help)) # add an handler for our biorhythm command dispatcher.add_handler(CommandHandler("biorhythm", biorhythm)) # add an handler for normal text (not commands) dispatcher.add_handler(MessageHandler(Filters.text, text)) # add an handler for errors dispatcher.add_error_handler(error) # start your shiny new bot updater.start_polling() # run the bot until Ctrl-C updater.idle() if __name__ == '__main__': main()
Пришло время проверить его:

Поздравляем! Telegram-бот на Python полностью готов.
Бот, созданный для примера, был сохранен. Его можно протестировать по имени пользователя @mastro35_mastrobot.
Как учить Python с нуля с удовольствием: пишем своего чат-бота
Рассказываем, как быстро и просто написать бота для Telegram на Python, используя библиотеку python-telegram-bot.
Привет! Меня зовут Илья Осипов, я методист курса программирования на Python «Девман» и больше 5 лет пишу код на этом языке. Сегодня расскажу, как новичку сделать полезного чат-бота.
Python — классный язык программирования. Но многие новички учат его неправильно: почти все онлайн-курсы, тренажёры, книги и видео предлагают начинать учить Python с нуля с каких-то странных задач, вроде: «Давайте решим вот эту математическую задачку» или «Давайте напишем рекурсивный поиск чисел Фибоначчи». Вы уже тоже зеваете от скуки?
Нет, удовольствие от программирования совсем не в этом, а в том, чтобы решать реальные проблемы. Например, я втянулся в программирование, когда писал чат-бота для своего вуза. Расписание на сайте было очень неудобно смотреть. Я решил потратить время и написать чат-бота, который будет присылать мне расписание занятий в более удобном виде. Оказалось, что другим студентам тоже было неудобно, и спустя год в чат-боте накопилось 4 тысячи пользователей.
Как раз на стыке между освоением синтаксиса и решением реальных проблем, как мне кажется, и сдаются большинство начинающих программистов. Совершенно не понятно как перейти от «сложить два числа» к написанию чего-то стоящего, чем можно похвастаться родителям, друзьям, жене и собаке.
Если вы тоже обнаружили себя в этой «яме», то этот туториал для вас. Дайте себе ещё один шанс.
Шаг 1. Зайдите в Repl.it
Создайте песочницу для языка Python. Ничего устанавливать не нужно. Просто откройте эту ссылку в соседней вкладке.
Придётся зарегистрироваться, но, думаю, вы разберётесь. ?
Шаг 2. Пройдите шаг 1
Эй, хватит читать! Так дела не делаются! Чтобы научиться программировать на Python — нужно писать код своими руками, а не смотреть, как кто-то делает это за вас ?
Вы же не думаете, что можно стать альпинистом, просматривая видео, как другие люди лезут в горы? А уж инструктором вас без реального опыта и подавно никто не наймёт. С программированием то же самое.
Шаг 3. Установите библиотеку для написания ботов
Многие советуют пользоваться более сложными библиотеками для чат-ботов. Например aiogram . Она крутая и популярная, но это библиотека для асинхронного кода. Это совсем другой зверь, которого не стоит касаться новичкам. Воспринимайте асинхронные библиотеки как другой язык программирования, хотя бы на старте.
Вместо этого будем работать с куда более простой библиотекой — python-telegram-bot . Откройте меню для установки библиотек слева-снизу:
Нужна кнопка Packages.
И в появившемся окошке вбейте её название. Нажмите на «+» напротив названия и подождите загрузки. В конце появится вот такая зелёная плашка об успехе:
Название библиотеки можно скопировать прямо из статьи, не обязательно печатать. ?
Теперь сложноватый и неприятный момент, но такова разработка, за это нам и платят деньги. Нужно будет поменять версию библиотеки на более дружелюбную для новичков. Для этого нужно зайти в очень недружелюбный файл и подправить число на 13.15 . В общем-то больше ничего делать и не нужно, думаю, вы справитесь:
Очень страшно, ничего не понятно, но надо только поменять одно число.
Шаг 4. Запустите пример из документации
В документации к библиотеке есть готовые примеры кода. Давайте запустим пример эхобота.
Эхобот — это бот, который просто повторяет за вами. Отвечает вам тем же, что вы написали ему. Вот пример в документации. Я почистил его от всякого ненужного, поэтому можете взять сразу мой, он должен быть не таким страшным. Копируйте этот код в файл main.py и жмите кнопку > Run наверху. Ничего не получится, но так и нужно, об этом ниже:
from telegram import Update, ForceReply from telegram.ext import Updater, CommandHandler, MessageHandler, Filters def start(update, context): user = update.effective_user update.message.reply_text('Привет!') def echo(update, context): update.message.reply_text(update.message.text) if __name__ == '__main__': updater = Updater("TOKEN") dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) updater.start_polling() updater.idle()
Шаг 5. Переживите шок от первой ошибки
В этом коде ошибка. Обычно новичкам от такого становится очень страшно, не хочется ни во что вникать, а поскорее закрыть консоль и больше никогда не возвращаться.
Поэтому обычно в курсах, книгах и видео ошибки от вас прячут: делают вид, что их не бывает. А вот в жизни всё совсем иначе, у программистов постоянно ошибка на ошибке, и бОльшую часть времени они тратят на то, чтобы разобраться, чего же этот Python от них хочет.
В хороших библиотеках ошибки исправлять очень легко. Они сами подсказывают вам, что делать. Давайте посмотрим, что тут написано:
Ошибка говорит, что что-то не то с токеном от Telegram. Ну и правда, вы же никаких ботов в Telegram ещё не заводили. Для запуска кода вам понадобится токен бота. Получить его можно прямо в Telegram, у официального бота @BotFather. Только не забудьте просить его с уважением!
Не переживайте, что я показываю свой токен. После публикации статьи я его удалил. .
Осталось вставить полученный токен в код и запустить его снова:
Заходите в Telegram, открывайте переписку с вашим ботом, и получайте удовольствие от беседы с цифровым другом:
Шаг 6. Начните менять код
В скопированном коде много всего страшного. Давайте коротко расскажу, как это всё работает.
Начинается исполнение кода отсюда:
if __name__ == '__main__': updater = Updater("5646004689:AAECTkuGjWo1Imwr-_6UrN-nzbo89sd3WSM") dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.text & ~Filters.command, echo)) updater.start_polling() updater.idle()
Почти весь этот код можно воспринимать просто как волшебство. Это штуки, которые запускают бота. Я сам толком не уверен, что там происходит внутри. Их просто не нужно менять, почти никогда.
Единственное, что пригодится — это строчки, начинающиеся с dispatcher.add_handler . Это «интеллект» вашего бота. По ним он определяет, как ему реагировать на ваше сообщение. Вот как эти строчки расшифровываются:
А вот что внутри функции echo:
def echo(update, context): update.message.reply_text(update.message.text)
Если просто перевести код на русский, становится понятнее:
Шаг 7. Веселитесь!
В документации python-telegram-bot есть масса примеров использования библиотеки. Там же можно подсмотреть как отправить фотку в Telegram или как создать отложенную задачу.
Остаётся только придумать, что будет делать ваш бот, разбить задачу на части и понемногу кодить его, добавляя и слегка переписывая примеры из документации.
Если вы будете достаточно упорны и потратите на это хотя бы пару месяцев, то станете настоящим крутаном. Останется дополнить свой стек другими технологиями, изучая их аналогичным образом, и всё получится.
Как создать Telegram бота с помощью Python
Представьте, что у вас есть бот в мессенджере, который присылает вам случайно выбранную картинку с собачкой, когда вам захочется. Звучит здорово, да? Давайте сделаем такого.
В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.
В конце урока у вас будет свой бот для снятия стресса, который будет присылать вам милых пёсиков, когда захотите.
Начнём
Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.
1. Создаём нового бота в BotFather
Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а
Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot . Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram.me/YOUR_BOT_USERNAME , а токен вот так:
704418931:AAEtcZ*************
2. Устанавливаем библиотеку
Команда для установки библиотеки:
pip3 install python-telegram-bot
Если всё прошло гладко, то можно двигаться дальше.
Пишем программу
Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop . Генерировать случайные изображения, нам поможет публичным API от RandomDog.
Рабочий процесс нашего бота очень прост:
запрос к API -> получить URL изображение -> отправить изображение
1. Импорт библиотек
Для начала импортируем все нужные библиотеки.
from telegram.ext import Updater, CommandHandler
import requests
import re
2. Доступ к API и получение URL изображения
Давайте создадим функцию для получения URL. Используя библиотеку запросов, мы можем обратится к API и получить json данные.
contents = requests.get('https://random.dog/woof.json').json()
Проверить json данные можно в браузере по ссылке https://random.dog/woof.json . Вы увидите что-то вроде этого:
Получаем URL, чтобы иметь возможность отправить изображение:
image_url = contents['url']
Оформим этот код в виде функции get_url() .
def get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url
3. Отправляем картинку
Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.
Получить URL изображения можно вызвав функцию get_url() .
url = get_url()
Чтобы получить ID получателя, используйте этот код:
chat_id = update.message.chat_id
После того как мы получили URL изображения и ID получателя, пришло время отправить сообщение, т.е. изображение.
bot.send_photo(chat_id=chat_id, photo=url)
Оберните код в функцию bop и убедитесь, что код выглядит следующим образом:
def bop(bot, update):
url = get_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)
4. Основная программа
И наконец, создайте ещё одну функцию с именем main , чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.
def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if name == '__main__':
main()
В итоге, ваш код должен выглядеть вот так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import redef get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return urldef bop(bot, update):
url = get_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if __name__ == '__main__':
main()
5. Запуск программы
Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:
python3 main.py
Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME . Отправьте команду /bop . Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.
Исправляем ошибки
Отлично! Теперь у вас есть работающий бот.
Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.
Давайте это исправим, чтобы бот отправлял нам только изображения. Если нам попадётся видео или GIF, мы снова будем вызывать API, пока не получим изображение.
1. Проверяем расширение файла с помощью регулярного выражения
Чтобы решить эту проблемы, мы будем использовать регулярное выражение.
Отличить изображение от видео или GIF, можно по расширению файла. Нам понадобится последняя часть URL.
Во-первых, необходимо определить, какие расширения файлов допускаются в нашей программе.
allowed_extension = ['jpg','jpeg','png']
Затем использовать регулярное выражение, чтобы извлечь расширение файла из URL.
file_extension = re.search("([^.]*)$",url).group(1).lower()
Создайте функцию get_image_url() , используя этот код. Она будет перебирать URL, пока вы не получите файл с подходящим расширением (jpg, jpeg, png).
def get_image_url():
allowed_extension = ['jpg','jpeg','png']
file_extension = ''
while file_extension not in allowed_extension:
url = get_url()
file_extension = re.search("([^.]*)$",url).group(1).lower()
return url
2. Модифицируем код
Отлично! Теперь нам осталось заменить строку url = get_url() в функции bop() на url = get_image_url() . Ваш код должен выглядеть так:
from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import redef get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return urldef get_image_url():
allowed_extension = ['jpg','jpeg','png']
file_extension = ''
while file_extension not in allowed_extension:
url = get_url()
file_extension = re.search("([^.]*)$",url).group(1).lower()
return urldef bop(bot, update):
url = get_image_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if __name__ == '__main__':
main()
Всё должно работать идеально. Этот код можно найти на моём GitHub.
Поздравляю с окончанием урока, теперь у вас есть классный бот для Telegram.
Как написать своего бота для telegram на python
Это пошаговое руководство по созданию бота для Telegram. Бот будет показывать курсы валют, разницу между курсом раньше и сейчас, а также использовать современные встроенные клавиатуры.
Время переходить к делу и узнать наконец, как создавать ботов в Telegram.
Шаг №0: немного теории об API Telegram-ботов
Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?
Ответ очень простой: для чтения сообщений отправленных пользователями и для отправки сообщений назад используется API HTML. Это требует использования URL:
Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, getUpdates , sendMessage , getChat и так далее.
Токен выглядит приблизительно так:
Для выполнения запросов используются как GET, так и POST запросы. Многие методы требуют дополнительных параметров (методу sendMessage , например, нужно передать chat_id и текст). Эти параметры могут быть переданы как строка запроса URL, application/x-www-form-urlencoded и application-json (кроме загрузки файлов). Еще одно требование — кодировка UTF-8.
После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода getME , ответ будет такой:
Если значение ‘ok’ — true, значит запрос был успешным и результат отобразится в поле ‘field’. Если false — в поле ‘description’ будет сообщение об ошибке.
Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .
Следующий вопрос: как получать пользовательские сообщения?
Есть два варианта.
Первый — вручную создавать запросы с помощью метода getUpdates . В качестве объекта вы получите массив объектов Update . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр offset .
Второй вариант — использовать webhooks. Метод setWebhook нужно будет применить только один раз. После этого Telegram будет отправлять все обновления на конкретный URL-адрес, как только они появятся. Единственное ограничение — необходим HTTPS, но можно использовать и сертификаты, заверенные самостоятельно.
Как выбрать оптимальный метод? Метод getUpdates лучше всего подходит, если:
- Вы не хотите или не можете настраивать HTTPS во время разработки.
- Вы работаете со скриптовыми языками, которые сложно интегрировать в веб-сервер.
- У бота высокая нагрузка.
- Вы меняете сервер бота время от времени.
Метод с Webhook лучше подойдет в таких случаях:
- Вы используете веб-языки (например, PHP).
- У бота низкая нагрузка, и нет смысла делать запросы вручную.
- Бот на постоянной основе интегрирован в веб-сервер.
В этом руководстве будет использоваться метод getUpdates .
Еще один вопрос: как создать зарегистрировать бота?
@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).
Существует масса библиотек, которые облегчают процесс работы с API Telegram-бота. Вот некоторые из них:
По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.
В этом руководстве будет использоваться библиотека pyTelegramBotApi.
Шаг №1: реализовать запросы курсов валют
Весь код был проверен на версии Python==3.7 c использование библиотек:
pyTelegramBotAPI==3.6.6
pytz==2019.1
requests==2.7.0
Начать стоит с написания Python-скрипта, который будет реализовывать логику конкретных запросов курсов валют. Использовать будем PrivatBank API. URL: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5.
Создадим файл pb.py со следующим кодом:
Были реализованы три метода:
- load_exchange : загружает курсы валют по указанному URL-адресу и возвращает их в формате словаря(dict).
- get_exchange : возвращает курсы валют по запрошенной валюте.
- get_exchanges : возвращает список валют в соответствии с шаблоном (требуется для поиска валют во встроенных запросах).
Шаг №2: создать Telegram-бота с помощью @BotFather
Необходимо подключиться к боту @BotFather, чтобы получить список чат-команд в Telegram. Далее нужно набрать команду /newbot для инструкций выбора название и имени бота. После успешного создания бота вы получите следующее сообщение:
Его нужно сразу настроить. Необходимо добавить описание и текст о боте (команды /setdescription и /setabouttext ), фото профиля ( /setuserpic ), включить встроенный режим ( /setinline ), добавить описания команд ( /setcommands ). Потребуется использовать две команды: /help и /exchange . Стоит описать их в /setcommands .
Теперь, когда настройка закончена, можно переходить к написанию кода. Прежде чем двигаться дальше, рекомендуется почитать об API и ознакомиться с документацией библиотеки, чтобы лучше понимать то, о чем пойдет речь дальше.
Шаг №3: настроить и запустить бота
Начнем с создания файла config.py для настройки:
В этом файле указаны: токен бота и часовой пояс, в котором тот будет работать (это понадобится в будущем для определения времени обновления сообщений. API Telegram не позволяет видеть временную зону пользователя, поэтому время обновления должно отображаться с подсказкой о часовом поясе).
Создадим файл bot.py . Нужно импортировать все необходимые библиотеки, файлы с настройками и предварительно созданный pb.py . Если каких-то библиотек не хватает, их можно установить с помощью pip .
Создадим бота с помощью библиотеки pyTelegramBotAPI. Для этого конструктору нужно передать токен:
Шаг №4: написать обработчик команды /start
Теперь чат-бот на Python работает и постоянно посылает запросы с помощью метода getUpdates . Параметр none_stop отвечает за то, чтобы запросы отправлялись, даже если API возвращает ошибку при выполнении метода.
Из переменной бота возможно вызывать любые методы API Telegram-бота.
Начнем с написания обработчика команды /start и добавим его перед строкой bot.polling(none_stop=True) :
Как можно видеть, pyTelegramBotApi использует декораторы Python для запуска обработчиков разных команд Telegram. Также можно перехватывать сообщения с помощью регулярных выражений, узнавать тип содержимого в них и лямбда-функции.
В нашем случае если условие commands=[‘start’] равно True , тогда будет вызвана функция start_command . Объект сообщения (десериализованный тип Message ) будет передан функции. После этого вы просто запускаете send_message в том же чате с конкретным сообщением.
Это было просто, не так ли?
Шаг №5: создать обработчик команды /help
Давайте оживим обработчик команды /help с помощью встроенной кнопки со ссылкой на ваш аккаунт в Telegram. Кнопку можно озаглавить “Message the developer”.
Как видно в примере выше, был использован дополнительный параметр ( reply_markup ) для метода send_message . Метод получил встроенную клавиатуру ( InlineKeyboardMarkup ) с одной кнопкой ( InlineKeyboardButton ) и следующим текстом: “Message the developer” и url=’telegram.me/artiomtb’ .
Код выше выглядит вот так:

Шаг №6: добавить обработчик команды /exchange
Обработчик команды /exchange отображает меню выбора валюты и встроенную клавиатуру с 3 кнопками: USD, EUR и RUR (это валюты, поддерживаемые API банка).
Вот как работает InlineKeyboardButton . Когда пользователь нажимает на кнопку, вы получаете CallbackQuery (в параметре data содержится callback-data ) в getUpdates . Таким образом вы знаете, какую именно кнопку нажал пользователь, и как ее правильно обработать.
Вот как работает ответ /exchange:

Шаг №7: написать обработчик для кнопок встроенной клавиатуры
В библиотеке pyTelegramBot Api есть декоратор @bot.callback_query_handler , который передает объект CallbackQuery во вложенную функцию.
Давайте реализуем метод get_ex_callback :
Метод answer_callback_query нужен, чтобы убрать состояние загрузки, к которому переходит бот после нажатия кнопки. Отправим сообщение send_exchange_query . Ему нужно передать Message и код валюты (получить ее можно из query.data . Если это, например, get-USD, передавайте USD).
Все довольно просто.
Сперва отправим состояние ввода в чат, так чтобы бот показывал индикатор «набора текста», пока API банка получает запрос. Теперь вызовем метод get_exchange из файла pb.py , который получит код валюты (например, USD). Также нужно вызвать два новых метода в send_message: serialize_ex , сериализатор валюты и get_update_keyboard (который возвращает клавиатуре кнопки “Update” и “Share”).
Запишем в get_update_keyboard текущий курс валют в callback_data в форме JSON. JSON сжимается, потому что максимальный разрешенный размер файла равен 64 байтам.
Кнопка t значит тип, а e — обмен. Остальное выполнено по тому же принципу.
У кнопки Share есть параметр switch_inline_query . После нажатия кнопки пользователю будет предложено выбрать один из чатов, открыть этот чат и ввести имя бота и определенный запрос в поле ввода.
Методы serialize_ex и дополнительный serialize_exchange_diff нужны, чтобы показывать разницу между текущим и старыми курсами валют после нажатия кнопки Update .
Как видно, метод serialize_ex получает необязательный параметр diff . Ему будет передаваться разница между курсами обмена в формате . Это будет происходить во время сериализации после нажатия кнопки Update . Когда курсы валют отображаются первый раз, он нам не нужен.
Вот как будет выглядеть бот после нажатия кнопки USD:

Шаг №8: реализовать обработчик кнопки обновления
Теперь можно создать обработчик кнопки Update . После дополнения метода iq_callback_method он будет выглядеть следующим образом:
Если данные обратного вызова начинаются с get- ( get-USD , get-EUR и так далее), тогда нужно вызывать get_ex_callback , как раньше. В противном случае стоит попробовать разобрать строку JSON и получить ее ключ t . Если его значение равно u , тогда нужно вызвать метод edit_message_callback . Реализуем это:
Как это работает? Очень просто:
- Загружаем текущий курс валюты ( exchange_now = pb.get_exchange(data[‘c’]) ).
- Генерируем текст нового сообщения путем сериализации текущего курса валют с параметром diff , который можно получить с помощью новых методов (о них дальше). Также нужно добавить подпись — get_edited_signature .
- Вызываем метод edit_message_text , если оригинальное сообщение не изменилось. Если это ответ на встроенный запрос, передаем другие параметры.
Метод get_ex_from_iq_data разбирает JSON из callback_data :
Метод get_exchange_diff получает старое и текущее значение курсов валют и возвращает разницу в формате :
get_edited_signature генерирует текст “Updated…”:
Вот как выглядит сообщение после обновления, если курсы валют не изменились:

И вот так — если изменились:

Шаг №9: реализовать встроенный режим
Реализация встроенного режима значит, что если пользователь введет @ + имя бота в любом чате, это активирует поиск введенного текста и выведет результаты. После нажатия на один из них бот отправит результат от вашего имени (с пометкой “via bot”).
Обработчик встроенных запросов реализован.
Библиотека передаст объект InlineQuery в функцию query_text . Внутри используется функция answer_line , которая должна получить inline_query_id и массив объектов (результаты поиска).
Используем get_exchanges для поиска нескольких валют, подходящих под запрос. Нужно передать этот массив методу get_iq_articles , который вернет массив из InlineQueryResultArticle :
Теперь при вводе “@exchangetestbost + пробел” вы увидите следующее:

Попробуем набрать usd, и результат мгновенно отфильтруется:

Проверим предложенный результат:

Кнопка “Update” тоже работает:

Отличная работа! Вы реализовали встроенный режим!
Выводы
Поздравляем! Теперь вы знаете, как сделать бота для Telegram, добавить встроенную клавиатуру, обновление сообщений и встроенный режим. Можете похлопать себя по спине и поднять тост за нового бота.
Как написать telegram-бота на python с помощью библиотеки telebot
Как написать telegram-бота на python с помощью библиотеки telebot
Установка и настройка
Для начала давайте скачаем сам python. Сделать это можно на официальном сайте. Не забудьте поставить галочку add to PATH во время установки! После установки python’a нам понадобится хороший редактор кода. На помощь приходит компания JetBrains со своим бесплатным PyCharm. Мы уже близко, осталось скачать библиотеку telebot. Для этого заходим в командную строку и пишем:
Если всё прошло успешно, мы можем продолжать!
Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую NordVPN.
Bot Father
В поиске telegram находим Bot Farher’a и создаем своего бота с помощью команды /newbot. Затем вводим имя и юзернейм. Обратите внимание, что юзернейм должен оканчиваться на bot!

Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM). Свой токен Вы можете запомнить, но я рекомендую его записать.
Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.

Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New → Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:
Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.
Напишем декоратор bot.message_handler(), с помощью которого наш бот будет реагировать на команду /start. Для этого в круглых скобках пишем commands=[‘start’]. В итоге у нас должно получиться это:
Если Вы попробуете запустить своего бота (ПКМ->Run), то у вас ничего не выйдет. Во первых в конце кода мы должны прописать bot.polling(). Это нужно для того, чтобы бот не выключился сразу, а работал и проверял, нет ли на сервере нового сообщения. А во вторых наш бот если уж и будет проверять наличие сообщений, то всё равно ничего ответить не сможет. Пора это исправлять! После нашего декоратора создаем функцию start_message, которая будет принимать параметр message (название функции может быть любым). Далее давайте реализуем отправку сообщения от самого бота. В функции пропишем bot.send_message(message.chat.id, ‘Привет, ты написал мне /start’). Смотрите, что у Вас должно получиться:

Отлично, наш бот работает! Чтобы он отвечал не только на команды, но и на сообщения, создадим новый декоратор bot.message_handler(), а в круглые скобочки напишем content_types=[‘text’]. Вообще существует множество видов контента, к примеру location, photo, audio, sticker и т.д. Но нам же нужно отвечать на текст, верно? Поэтому создаём функцию send_text, принимающую параметр message. В функции пропишем условие:
Если текст сообщения будет равен «Привет», то бот отвечает «Привет, мой создатель», а если текст сообщения будет равен «Пока», то бот ответит «Прощай, создатель». Тут думаю всё понятно. Но вы скорее всего задались вопросом, а если пользователь пропишет «привет», ну или «пРиВет», как быть в этой ситуации? Всё достаточно просто! В условии, после message.text напишите функцию .lower(), а в тексте все заглавные буквы замените на строчные. Теперь наш бот отвечает не только на «привет», но и на «ПривеТ», и даже «пРиВеТ».

Вот что у вас должно получиться:
Отлично, с текстом мы разобрались, но как же отправить к примеру стикер? Всё просто! У каждого стикера есть свой id, соответственно зная id мы сможем его отправить. Получить id стикера можно двумя способами. Первый (простой) — через специального бота «What’s the sticker id?»

Ну и второй способ, для тех, кто не ищет лёгких путей. Создаем новый декоратор bot.message_handler(), вот только в скобочки пишем content_types=[‘sticker’]. Далее всё как обычно. Создаем функцию, принимающую параметр message, а вот в ней пропишем print(message). Запускаем бота.

Смотрите, как только я отправил стикер, он сразу же вывел информацию в консоль, и в самом конце будет наш id стикера (file_id). Давайте сделаем так, чтобы когда пользователь отправил боту «я тебя люблю», то бот ему ответил стикером. Создавать новый декоратор не нужно, мы просто допишем условие, которое было до этого. Вот только вместо bot.send_message() пропишем bot.send_sticker(), а вместо текста напишем id стикера.

Поздравляю, всё получилось! Думаю как отправить аудио, фото, и геолокацию, вы разберетесь сами. Я же хочу показать вам, как сделать клавиатуру, которую бот покажет вам при старте. Это уже будет сделать сложнее. Создаем переменную keyboard1, в которую запишем telebot.types.ReplyKeyboardMarkup(). Эта функция вызывает клавиатуру. Далее создадим ряды, но помните, что рядов может быть не больше 12! Для того, чтобы их создать, пишем keyboard1.row(). В круглые скобочки запишите всё что хотите, лично я напишу «Привет» и «Пока». Теперь, чтобы вызвать клавиатуру, допишем reply_markup=keyboard1 к функции отправки сообщения при старте. Вот, что у вас должно получиться:

Вы видите, что клавиатура какая-то большая. Чтобы это исправить, нужно просто в ReplyKeyboardMarkup() прописать True. Ну а если вы хотите, чтобы клавиатура скрывалась, как только пользователь нажал на нее, то напишите еще один True. Подробнее прочитать, что означают эти True вы можете в официальной документации.
Ну а на этом всё! Конечно, это не все возможно ботов в telegram, но основные возможности я вам показал. Спасибо за внимание.
Что такое message?
Наверное многие, кто писал бота по моей предыдущей статье задались вопросом, что такое message и почему к примеру, чтобы отправить сообщение мы должны указать message.chat.id в параметрах функции send_message? Для того, чтобы узнать это давайте выведем message в консоль:
Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:
К примеру из всей этой информации мы хотим получить id чата, из которого я отправлял сообщение. Для этого обратимся к ключу chat.
Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:
Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:
Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.
Теперь достанем значение у ключа first_name:
Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:

Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!
Теперь смотрите, для того, чтобы отправить сообщение в какой-либо чат нам необходимо указать несколько параметров в функцию send_message. Первый параметр — это chat_id, собственно сам id чата. Второй — text, текст сообщения. И как вы догадались, вместо того, чтобы писать message.chat.id, мы можем написать свои данные! Вот так можно прислать сообщение самому себе, если указать в параметрах свой id:
Ну а когда мы пишем message.chat.id, мы подразумеваем, что бот отправит сообщение в чат, из которого его вызвали.
Заключение
Ну а на этом всё! Надеюсь вы поняли как получать данные от сервера, обрабатывать их и использовать где нужно. Спасибо за внимание.
Библиотека python-telegram-bot в Python.
Пакет python-telegram-bot предоставляет чистый интерфейс Python для Telegram Bot API. Он совместим с версиями Python 3.6+. Пакет python-telegram-bot также может работать с PyPy3 (официально не поддерживается), хотя раньше было много проблем.
В дополнение к чистой реализации API эта библиотека содержит ряд высокоуровневых классов, которые делают разработку ботов простой и понятной. Эти классы содержатся в модуле telegram.ext .
Реализация чистого API без расширений telegram.ext доступна как отдельный пакет python-telegram-bot-raw .
Установка пакета python-telegram-bot в виртуальное окружение:
Пакет python-telegram-bot в основном будет разбираться на примерах. Содержание, обзорного/вводного материала по библиотеке ниже. Меню с материалами по всему разделу — справа. Поехали.
Содержание:
Чистая реализация официального Telegram Bot API.
API бота предоставляется через класс telegram.Bot . Методы, определенные в telegram.Bot являются эквивалентами в виде методов snake_case , описанных в официальной документации Telegram Bot API. Для удобства, также доступны точные названия методов в виде camelCase , указанные в документации Telegram. Так, например, вызов telegram.Bot.send_message совпадает с вызовом метода telegram.Bot.sendMessage .
Все классы объектов Telegram Bot API расположены в основном модуле пакета telegram , например, класс объекта Message доступен как telegram.Message .
Чтобы сгенерировать токен доступа, необходимо пообщаться с @BotFather и выполнить несколько простых шагов, описанных в разделе Команды и оповещения @BotFather в Telegram.
Чтобы получить представление об API и о том, как его использовать с пакетом python-telegram-bot , запустите интерпретатор Python и выполните следующие несколько шагов.
Сначала создаем экземпляр telegram.Bot . Константу TOKEN следует заменить токеном API, который был получен от @BotFather :
Примечание: боты не могут инициировать чаты с пользователями. Пользователь должен либо добавить их в группу, либо сначала отправить им сообщение. Для подключения к создаваемому боту или каналу в основном используются ссылки, такие как https://telegram.me/bot_username или можно попробовать найти бота по имени в своем десктопном или мобильном приложении.
Как отвечать/получать сообщения на чистом API?
Для получения сообщений, отправленных боту, можно использовать метод API .getUpdates .
Примечание: не нужно использовать .get_updates , если пишете своего бота с модулем расширения telegram.ext , поскольку telegram.ext.Updater получает все обновления/сообщения в автоматическом режиме.
На чистом API это выглядит следующим образом:
Получение изображения, отправленного боту:
Для отправки сообщения всегда нужен будет chat_id :
Примечание. Метод .send_message , как и любой из методов send_* класса Bot возвращает экземпляр класса Message , поэтому его можно использовать в коде позже.
Ответ на конкретное сообщение, полученное в обновлении:
Примечание. Существуют эквиваленты этого метода для ответа с фотографиями, аудио и т. д., а так же аналогичные эквиваленты встречаются по всей библиотеке python-telegram-bot .
Пример бота для ответа на сообщения на чистой реализации API Telegram.
Простой бот для ответа на сообщения Telegram. Пример построен на чистом API Telegram, который реализует пакет python-telegram-bot .
Модуль расширения telegram.ext .
Модуль расширений telegram.ext построен поверх чистой реализации Telegram Bot API. Он предоставляет простой в использовании интерфейс и снимает с программиста некоторую работу.
Он состоит из нескольких классов, но два наиболее важных — это telegram.ext.Updater и telegram.ext.Dispatcher .
Класс Updater постоянно слушает сервер Telegram, получает новые сообщения и передает их классу Dispatcher . Если создать объект Updater , то он автоматически создаст Dispatcher и свяжет их вместе с очередью. Затем в объекте Dispatcher можно зарегистрировать обработчики разных типов, которые будут сортировать полученные объектом Updater сообщения. Поступающие сообщения будут обрабатываться в соответствии с зарегистрированными обработчиками и передавать их в функцию обратного вызова, которую необходимо определить.
Еще нужно знать и понимать, что экземпляр Updater реализует все методы класса telegram.Bot (API Telegram), которые будут связаны с данным Updater . У экземпляра Dispatcher , в свою очередь, есть так называемый контекст context , который, при регистрации любого обработчика сообщений передается в функцию обратного вызова этого обработчика (кстати в нее так же передается updater ). Так вот, у этого контекста то же есть экземпляр класса telegram.Bot , только он связан с конкретным сообщением, которое попало в эту функцию обратного вызова.
Каждый обработчик является экземпляром подкласса класса telegram.ext.Handler . Пакет python-telegram-bot предоставляет классы обработчиков почти на все стандартные случаи, но если нужно что-то конкретное, то можно создать собственный обработчик, наследуясь от класса Handler .
Создание Telegram bot, шаг за шагом.
Во-первых, нужно создать объект Updater . В коде ниже замените константу TOKEN на токен API вашего бота. Для более быстрого доступа к Dispatcher , в который Updater посылает сообщение, можно создать его отдельно:
Примечание. Аргумент use_context=True (по умолчанию False ) — это специальный аргумент, необходимый только для python-telegram-bot меньше 12 версии. Это обеспечивает лучшую обратную совместимость со старыми версиями и дает пользователям время для обновления. Начиная с 13-ой версии, значение аргумента use_context=True используется по умолчанию (указывать не нужно).
Чтобы знать, когда и почему что-то не работает должным образом, настроим модуль ведения журнала логов:
Примечание. если хотите узнать больше об обработке исключений с python-telegram-bot , прочтите подраздел об "Обработка исключений".
Теперь определим функцию, которая должна обрабатывать определенный тип сообщения, отправленных боту:
Цель состоит в том, чтобы эта функция вызывалась каждый раз, когда бот получает сообщение с серверов Telegram, содержащее команду /start . Для этого можно использовать класс CommandHandler (один из предоставленных подклассов Handler ) и зарегистрировать его в Dispatcher :
И это все, что нужно! Для запуска бота дописываем команду:
Начните чат со своим ботом и введите команду /start — если все пойдет хорошо, он ответит.
Созданный бот может отвечать только на команду /start . Добавим еще один обработчик, который прослушивает обычные сообщения. Для этого используем класс MessageHandler — другой подкласс Handler , для вывода всех текстовых сообщений:
С этого момента создаваемый бот должен обрабатывать все получаемые текстовые сообщения, а так же работать с командой /start , но не будет реагировать на любые другие команды (например, /your_command ) .
Примечание: как только новые обработчики добавляются в диспетчер, они сразу вступают в силу.
Примечание. Класс telegram.ext.Filters содержит ряд так называемых фильтров, которые фильтруют входящие сообщения по тексту, изображениям, обновлениям статуса и т. д. Любое сообщение, которое возвращает True хотя бы для одного из фильтров, переданных в MessageHandler , будет принято. Если необходимо, то можно написать свои собственные фильтры. Подробнее смотрите раздел "Все о фильтрации сообщений python-telegram-bot в Python".
Добавим боту другую функциональность и реализуем команду /caps , которая будет принимать какой-то текст в качестве аргумента и отвечать на него тем же текстом, только в верхнем регистре. Аргументы команды (например /caps any args ) будут поступать в функцию обратного вызова в виде списка ['any', 'args'] , разделенного по пробелам:
Примечание. Обратите внимание на использование context.args . Объект CallbackContext будет иметь много разных атрибутов в зависимости от того, какой обработчик используется.
Режим встроенных запросов.
Еще одна интересная особенность официального Telegram Bot API — это режим встроенных запросов к ботам. Помимо отправки команд в личных сообщениях или группах, пользователи могут взаимодействовать с ботом с помощью встроенных запросов. Если встроенные запросы включены, то пользователи могут вызвать вашего бота, введя его имя @bot_username и запрос в поле ввода текста в любом чате. Запрос отправляется боту в обновлении. Таким образом, люди могут запрашивать контент у ботов в любом из своих чатов, групп или каналов, вообще не отправляя им никаких отдельных сообщений.
Если необходимо реализовать такую функциональность для своего бота, то сначала необходимо изменить конфигурацию в @BotFather , включив этот режим при помощи команды /setinline . Иногда требуется какое-то время, пока бот не зарегистрируется в качестве встроенного бота на вашем клиенте. Можно ускорить процесс, перезапустив приложение Telegram или иногда просто нужно немного подождать.
Создаем Telegram бота на Python часть-1



Существует множество различных статей и учебных пособий по созданию ботов для телеграмм, некоторые из них достаточно сложны, часть требует знания отдельных технологий и фреймворков. В данной статье мы рассмотрим создание чат бота в мессенджере Telegram с нуля. От нас не будет требоваться каких-то специальных знаний. Для начала достаточно будет начальных знаний языка Python в качестве языка программирования.
Часть 1: Регистрация нового Telegram Bot-а
Для начала вы должны быть зарегистрированы в Telegram- мессенджере. Далее, вы в мобильной, десктопной или web-версии мессенджера открываете общение с ботом @BotFather, либо по ссылке https://telegram.me/botfather.


После начала общения с этим ботом, нажав /start, вы получите ответ от бота с указанием его возможностей. Нас интересует создание нового бота — /newbot.
После того как мы введем /newbot нас попросят придумать имя для нашего нового бота. Пусть оно будет MyFirstTestBot.
Далее нам нужно придумать юзернэйм для нашего бота. В нашем случае это будет mft001_bot.
После этого BotFather высылает нам специальный токен:
Наш токен оказался: 851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM (В вашем случае токен будет другой.)
Этот токен понадобится нам при настройке нашего бота. Токен должен быть сохранён. Именно он является единственным ключем для взаимодействия с ботом.
Также мы получаем ссылку на нашего бота. В моем случае это t.me/mft001_bot.
Теперь наш Tekegram-бот создан. Мы можем начать настраивать своего бота, например, установить изображение для бота, изменить или добавить описание бота и тп.
Тема связана со специальностями:
С регистрацией бота мы закончили. Наш бот уже есть, но на данный момент он еще ничего не умеет. Теперь нам нужна его начинка – какой-то механизм, который будет обрабатывать наши запросы к этому боту и возвращать нам ответы.
Часть 2 Написание кода
Как и написано выше мы будем создавать нашего бота на языке Python. Установите его с официального сайта, если вы используете Windows или выполните команду в терминале на Linux:
Далее воспользуемся системой управления пакетами PIP, которая используется для установки и управления программными пакетами, и установим библиотеку PyTelegramBotAPI (Telebot):
Создадим логику работы нашего бота. Используя полноценный IDE или простой текстовый редактор создадим файл ourbot.py и заполним его необходимой логикой.
Для начала нам нужно выполнить импорт библиотеки PyTelegramBotAPI (Telebot), написав в нашем файле:
Теперь создадим метод, для получения сообщений.
Возможности PyTelegramBotAPI позволяют отправлять боту аудио (content_types=['audio'), видео (content_types=['video'), документы (content_types=['document'), текст (content_types=['text'), географический адрес (content_types=['location'), данные контакта (content_types=['contact') и стикеры (content_types=['sticker'). Мы, для простоты опыта, будем общаться с ботом только текстом:
Теперь рассмотрим логику обработки наших текстовых сообщений. Мы хотим захардкодить простое общение бота с пользователем: бот должен уметь здороваться, когда с ним здороваются, уметь отвечать на вопросы «Кто ты?», «Как тебя зовут?» и «Что ты умеешь?».
Видео курсы по схожей тематике:



UX/UI Design Стартовый
После тела метода, обрабатывающего наши запросы к боту, добавим вызов метода:
Задачей этого метода является создание потока, в котором бот отправляет запросы на сервер, уточняя таким способом, не писал ли ему кто-то сообщение. Параметр none_stop: False означает, что наша программа будет продолжать отправлять запросы на сервер после получения сообщения об ошибке от сервера Telegram.
Сохраним наш код:
Мы можем протестировать работу нашего бота, запустив его код в той IDE, в которой мы писали. И написав нашему боту в мессенджере.
Наш учебный Telegram-бот создан. Мы можем запустить наш файл локально, и он будет отрабатывать запросы к нему через мессенджер прямо на нашем компьютере, выступающим в роли сервера. Но это не очень удобная практика. Для нормальной работы код желательно залить на отдельный сервер и запустить его там.
Вопросы заливки нашего простого бота на сервер мы рассмотрим в следующей статье.
Резюме
Как мы увидели, создание работающего бота на Python для Telegram мессенджера достаточно просто. Для простых ботов не нужно использовать сложные решения — есть удобная библиотека PyTelegramBotAPI, позволяющая решить такие задачи. В нашем учебном примере мы рассмотрели только работу с текстом, но, благодаря этой библиотеке, бот может работать и с другими форматами данных. Попробуйте сами сделать своего бота, отвечающего на ваши вопросы.
Бесплатные вебинары по схожей тематике:

Обучение как фактор мотивации в проектных командах

Возможности Vue.js для веб разработчика

С нашей стороны мы рекомендуем ознакомиться с курсом подготовки Python-разработчика. Знания, полученные после прохождения данного курса позволят вам не только создавать различные приложения, но и получить полноценную профессию разработчика программного обеспечения.
Похожие публикации:
- Где находится python exe
- Зачем python
- Как в python выводить данные в одну строку
- Как ввести число пи в python
Пишем простого бота-администратора для 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, которая предоставляет мощные инструменты для работы с табличными данными и статистическим анализом.
Введение, простой echo-бот
Приветствую тебя, читатель! Telegram Bot API – это мощный инструмент для вообще чего угодно. Автоматизация действий, работа с пользователями, онлайн-магазины, игры и много чего ещё. В этом учебнике мы научимся писать ботов для Telegram на языке Python.
Сразу оговорюсь: тот бот, который получится в итоге - это лишь прототип, цель всех этих постов - рассказать об основах ботостроения, показать, как можно за короткое время написать простого бота для своих нужд.
Язык программирования будет Python 3, но это не означает, что любители PHP, Ruby и т.д. в пролёте; все основные принципы совпадают. Я не буду особо останавливаться на описании самого языка, желающие могут ознакомиться с документацией по Python здесь.
Подготовка к запуску
Взаимодействие ботов с людьми основано на HTTP-запросах. Чтобы не мучаться с обработкой «сырых» данных, воспользуемся библиотекой pyTelegramBotAPI, которая берет на себя все нюансы отправки и получения запросов, позволяя сконцентрироваться непосредственно на логике. Установка библиотеки предельно простая:
pip install pytelegrambotapi python3
Скриншот из терминала с запущенным интерпретатором Python
Обратите внимание: библиотека называется pyTelegramBotAPI , а не telebot . Последнюю ставить не нужно!
Теперь можно выйти из режима Python-консоли (Ctrl+Z или Ctrl+D, или exit() )
Пишем простого echo-бота
Ну, довольно слов, перейдем к делу. В качестве практики к первому уроку, напишем бота, повторяющего присланное текстовое сообщение. Создадим каталог, а внутри него 2 файла: bot.py и config.py . Я рекомендую выносить различные константы и настройки в файл config.py , дабы не загромождать другие. В файл config.py впишем:
# Токен ненастоящий :) Подставьте свой token = '1234567890:AAE_abCDEFghijKLmNOpqRsTuVWxyz'
Теперь надо научить бота реагировать на сообщения. Напишем обработчик, который будет реагировать на все текстовые сообщения.
@bot.message_handler(content_types=["text"]) def repeat_all_messages(message): # Название функции не играет никакой роли bot.send_message(message.chat.id, message.text)
У читателя возникнет вопрос: зачем там символ “@”? Что это вообще за message_handler ? Дело в том, что после приёма сообщения от Telegram его надо обработать по-разному в зависимости от того, что это за сообщение: текст “привет” или текст “пока”, может быть, вообще стикер или музыка. Первое, что придёт в голову – написать множество конструкций if-then-else , но такой подход некрасивый и позволяет быстро запутаться.
Для решения этой проблемы автор библиотеки pyTelegramBotAPI реализовал механизм хэндлеров, которые используют питоновские декораторы (пока просто запомним это слово). В хэндлере описывается, в каком случае необходимо выполнять ту или иную функцию. Например, хэндлер @bot.message_handler(content_types=["text"]) выполнит нижестоящую функцию, если от Telegram придёт текстовое сообщение, а хэндлер @bot.message_handler(commands=["start"]) сработает при получении команды /start.
Теперь запустим бесконечный цикл получения новых записей со стороны Telegram:
if __name__ == '__main__': bot.infinity_polling()
Функция infinity_polling запускает т.н. Long Polling, бот должен стараться не прекращать работу при возникновении каких-либо ошибок. При этом, само собой, за ботом нужно следить, ибо сервера Telegram периодически перестают отвечать на запросы или делают это с большой задержкой приводя к ошибкам 5xx)
Итак, полный код файла bot.py выглядит следующим образом:
import config import telebot bot = telebot.TeleBot(config.token) @bot.message_handler(content_types=["text"]) def repeat_all_messages(message): # Название функции не играет никакой роли bot.send_message(message.chat.id, message.text) if __name__ == '__main__': bot.infinity_polling()
Готово! Осталось запустить бота: python3 bot.py
Бот работает
На этом первый урок окончен.
Создайте собственного весёлого чат-бота в Telegram с помощью Python: Пошаговое руководство 2023
1. Для начала убедитесь, что на вашем компьютере установлен Python.
2. Затем получите учетные данные для аутентификации Telegram API.
В начале вам нужно будет создать нового бота и получить его shiny API token. Не волнуйтесь, это очень просто! Просто пообщайтесь с ботом BotFather в Telegram, и он поможет вам с реализацией этого процесса. Следуйте этим шагам:
Создайте своего первого Telegram-бота на базе ChatGPT: Пошаговое руководство 2023
Руководство не рабочее, не понятно какой код куда вставлять.
Развернуть ветку
что именно не работает ? python какой версии ?
Развернуть ветку
Ндамс. Совсем даже не для чайников текст ) Где создавать, что запускать, куда что вводить) а так - да, наверн полезная инструкция.
Развернуть ветку
да уж. Мне пришлось спрашивать у самого чатGPT куда какой код вставлять, чтобы разобраться что писал автор статьи. Умник бл
Развернуть ветку
Проблема даже не в вашем коде, а в том что не понятно куда вставлять эти куски кода.
Если с гитхаба клонирую проект вставляю ключи работает, но chatgp не отвечает, может быть там на узбекском нужно я не знаю.
И вот это тоже не понятно что такое (ENTRY_STATE,
QUESTION_STATE,
) = range(2)
Развернуть ветку
Эта инструкция видимо очень сложная для моего уровня владения python
Развернуть ветку
попробуйте сначала самые азы
Развернуть ветку
Развернуть ветку
Самый прикол что мне chat gp нужен чтобы питон учить)))
Развернуть ветку
Пост больше подходит для habr, чем для vc
Развернуть ветку
Спасибо, получилось разобраться и без навыков кодинга, хоть и непросто было. Все получилось. Правильно понимаю, что это не та же версия, что в веб-интерфейсе работает? Отвечает как-то кривовато, как будто через переводчик проходит.
Отдельное спасибо за ссылку на узбекский гит со своими прикольчиками.
Развернуть ветку
Можно по подробнее для чайников?
