Как создать бота для телеграмма на python
Перейти к содержимому

Как создать бота для телеграмма на python

  • автор:

Как создать бота с игрой в телеграмм c помощью Python.

Hello World!
Недавно я писал бота для телеграмм и один мой знакомый рассказал, что в телеграмме есть еще и игры. Мне стало интересно и я решил прогуглить. Идея игр в телеграмм мне понравилась и я подумал, что было бы хорошо интегрировать данную опцию в моего телеграмм бота, так как это добавит интерактивности. Телеграмм ботов я разрабатываю на Python, используя при этом библиотеку pyTelegramBotAPI. Вообщем, я начал искать и , к сожалению, не нашел нужной для меня информации, собранной в одном месте и на русском языке. Но как-то у меня получилось собрать все в кучу и немного разобраться с играми в телеграмм и теперь я хочу поделиться этим с вами. Сразу скажу, что в данной статье не будет каких-то детальных технических особенностей и тому подобных вещей. Начинаем.

Так, в статье я предполагаю, что у вас уже установлена библиотека pyTelegramBotAPI, а также вы более или менее понимаете, как создавать телеграмм ботов. В противном случае со всем этим вы можете ознакомиться в Интернете — информации достаточно.
Итак, импортируем библиотеку pyTelegramBotAPI, создаем бота с помощью BotFather и создаем объект бота используя токен, который выдал нам BotFather.

Хорошо, давайте теперь создадим игру. Делается это также с помощью BotFather. Пишем /newgame и следуем дальнейшим инструкциям.

Окей, дальше, когда вы согласитесь(или не согласитесь ��) с условиями пользователя, BotFather напишет, что ваш бот работает не в inline_mode, а бот с игрой должен работать именно в этом режиме. Но это не проблема. Просто пропишите команду /setinline и BotFather выдаст вам список ваших ботов и предложит выбрать какого из ботов вы хотите перевести в inline режим. Смело выбирайте какого-то из своих ботов.

Отлично, теперь можно создавать игру. Пишем опять /newgame и следуем инструкциям.

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

Добавим message_handler , который обрабатывает команду /start (я не буду объяснять, как работают messege_handlers — вы сами можете найти это в интернете. Вот статья ,где описано, как с ними работать.) Также воспользуемся методом send_game() для того, чтобы бот кидал пользователю саму игру.(детальную информацию о методах вы можете найти в справочнике по ссылке)

game_short_name — название вашей игры.

Теперь, когда мы запустим бота и пропишем команду /start , он вернет нам игру. Эта игра пока еще ничего не делает, но вскоре мы это исправим.

Когда вы нажмете на кнопку “Play simplegame”, ничего не произойдет. (кстати, вы можете добавлять/изменять кнопки под игрой. Как это делать? Поищите в интернете.��)

Ладно, давайте теперь сделаем так, чтобы наша игра работала при нажатии кнопки. Для этого добавим обработчик кол-беков:

И в нем используем метод answer_callback_query()

Ну вот и все �� . Теперь, когда вы нажмете на кнопку “Play simplegame”, у вас в телеграмме откроется игра aragio.

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

Надеюсь, я чем-то вам помог.
PS. Для того, чтобы создать свою собственную игру, вам понадобятся знания HTML/CSS/JS. Вот статья, где это описано.

Команды и оповещения @BotFather в Telegram

Для создания нового бота необходимо использовать команду /newbot . @BotFather запросит имя бота и имя пользователя бота (логин), а затем сгенерирует токен авторизации для вашего нового бота.

Имя бота отображается в контактных данных и в других местах.

Имя пользователя бота — это логин бота и представляет из себя короткое имя, которое будет использоваться в упоминаниях и ссылках на t.me . Обратите внимание, что в дальнейшем имя пользователя изменить нельзя! Имена пользователей (логины) состоят из 5–32 символов и нечувствительны к регистру, и могут включать только латинские символы, числа и символы подчеркивания. Имя пользователя бота должно заканчиваться на bot , например tetris_bot или TetrisBot .

Токен представляет собой строку типа 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw , которая требуется для авторизации бота и отправки запросов в API бота. Держите свой токен в безопасности и храните его, он может быть использован кем угодно для управления вашим ботом.

Пересоздание токена авторизации Telegram бота.

Если существующий токен скомпрометирован или был утерян по какой-либо причине, то используйте команду /token для создания нового.

Команды @BotFather

  • /mybots — возвращает список ваших ботов с удобными элементами управления для редактирования их настроек.
  • /mygames — делает то же самое для ваших игр
Команды редактирования Telegram бота:
  • /setname — изменить имя вашего бота.
  • /setdescription — изменить описание бота, текст до 512 символов, описывающий бота. Пользователи увидят этот текст в начале разговора с ботом, озаглавленный «What can this bot do?».
  • /setabouttext — изменить информацию о боте, более короткий текст до 120 символов. Пользователи увидят этот текст на странице профиля бота. Когда они делятся вашим ботом с кем-то, этот текст отправляется вместе со ссылкой.
  • /setuserpic — изменить фото профиля бота.
  • /setcommands — изменить список команд, поддерживаемых ботом. Пользователи будут видеть список команд всякий раз, когда они набирают ‘/’ в разговоре с вашим ботом. Каждая команда имеет имя (должно начинаться с косой черты ‘/’ , буквенно-цифровое значение плюс подчеркивание, не более 32 символов, без учета регистра), параметры и текстовое описание.
  • /deletebot — команда удаляет бота и освобождает его логин.
Команды изменения настроек Telegram бота.
  • /setinline — переключает встроенный режим запросов для бота.
  • /setinlinegeo — запрашивает данные о местоположении для предоставления встроенных результатов на основе местоположения.
  • /setjoingroups — переключатель, который отвечает за то, можно ли добавлять бота в группы или нет. Любой бот должен уметь обрабатывать личные сообщения, но если создаваемый бот не предназначен для работы в группах, то можно отключить этот режим.
  • /setprivacy — установить, какие сообщения будет получать бот при добавлении в группу. Если режим конфиденциальности отключен, то бот будет получать все сообщения. Мы рекомендуем оставить режим конфиденциальности включенным. Вам нужно будет повторно добавить бота в существующие группы, чтобы это изменение вступило в силу.
Команды управления играми.
  • /newgame — создать новую игру.
  • /listgames — получить список ваших игр.
  • /editgame — редактировать игру.
  • /deletegame — удалить существующую игру.

Обратите внимание, что изменения вступят в силу не сразу, а через несколько минут.

Ограничения и предупреждения о статусе Telegram бота.

Миллионы выбирают Telegram за его скорость. Чтобы оставаться конкурентоспособным в этой среде, ваш бот также должен быть быстрым. Чтобы помочь разработчикам поддерживать своих ботов в форме, @BotFather отправляет оповещения о статусе, если видит, что что-то не так.

Telegram будет проверять количество ответов и коэффициент конверсии запросов/ответов для популярных ботов (300 запросов в минуту: это значение может измениться в будущем). Если имеем аномально низкие показания, то получим уведомление от @BotFather .

Ответы на предупреждения.

По умолчанию вы будете получать только одно предупреждение на одного бота в час. Каждое предупреждение имеет следующие кнопки:

  • Fixed . Используйте эту кнопку, если обнаружили проблему с вашим ботом и исправили ее. Если нажать на кнопку Fixed , то отправку предупреждений в обычном режиме возобновится, для того чтобы увидеть, сработало ли исправление в течение 5–10 минут, вместо того, чтобы ждать час.
  • Support . Используйте эту кнопку, чтобы открыть чат с @BotSupport , если не видите проблем с ботом или считаете, что проблема на стороне Telegram.
  • Mute for 8h/1w . Используйте кнопку, если нет возможности исправить бота в данный момент. Это отключит все предупреждения для рассматриваемого бота за указанный период времени. Мы не рекомендуем использовать эту опцию, поскольку пользователи могут перейти на более стабильный бот. Вы можете включить оповещения в настройках своего бота через @Botfather .

Отслеживаемые проблемы Telegram бота.

В настоящее время Telegram будет уведомлять о следующих проблемах:

  1. Too few private messages are sent compared to previous weeks: . Бот отправляет гораздо меньше сообщений, чем в предыдущие недели. Такие уведомления полезны для ботов в стиле новостной рассылки, которые рассылают сообщения без возможности получения ответов от пользователей. Чем больше значение, тем значительнее разница.
  2. Too few replies to incoming private messages. Conversion rate: . Бот не отвечает на все сообщения, которые ему отправляются (коэффициент конверсии запроса/ответа для бота был слишком низким по крайней мере в течение двух из последних трех 5-минутных периодов). Чтобы обеспечить хороший пользовательский опыт, пожалуйста, отвечайте на все сообщения, которые отправляются вашему боту.
  3. Too few answers to inline queries. Conversion rate: . Бот не отвечает на все встроенные запросы, которые ему посылаются, рассчитанные таким же образом, как и выше. Отвечайте на обновления inline_query , вызывая answerInlineQuery .
  4. Too few answers to callback queries. Conversion rate: или Too few answers to callback game queries. Conversion rate: . Бот не отвечает на все запросы обратного вызова, которые ему посылаются (с играми или без них), рассчитанные таким же образом, как и выше. Отвечайте на сообщения callback_query , вызывая answerCallbackQuery .

Обратите внимание, что функция оповещения о состоянии все еще тестируется и будет улучшена в будущем.

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Переход на асинхронный python-telegram-bot версии 20.x
  • Чистый интерфейс Python для Telegram Bot API
  • Команды и оповещения @BotFather в Telegram
  • Обработка сообщений модулем python-telegram-bot
  • Фильтры сообщений модуля python-telegram-bot
  • Хранение временных данных модулем python-telegram-bot
  • Настройки по умолчанию модуля python-telegram-bot
  • Планировщик сообщений модуля python-telegram-bot
  • Форматирование и отправка сообщений в python-telegram-bot
  • Работа с файлами/media, модуль python-telegram-bot
  • Меню из кнопок, модуль python-telegram-bot
  • Объект CallbackContext модуля python-telegram-bot
  • Подключения Telegram-бота через webhook
  • Обработка исключений модуля python-telegram-bot
  • Создание Inline-бота, модуль python-telegram-bot
  • Работа с опросами в модуле python-telegram-bot
  • Создание разговоров ConversationHandler в python-telegram-bot
  • Перезапуск телеграмм-бота в случае ошибки
  • Декоратор-обработчик сообщений в python-telegram-bot
  • Авторизация на сайте через Telegram Passport
  • Ведение публикаций в Telegram-канале с python-telegram-bot
  • UTF коды emoji/эмодзи для отправки в Telegram из Python

Как создать телеграм-бот на Python

Как создать телеграм-бот на Python

Чем приятно делать телеграм-бот на Python, так это удобство и простота. Когда я создавал свой чат-бот на PHP, то столкнулся с тем, что а) почти все существующие библиотеки работали не так как мне было нужно и б) с ними было сложно работать.

Тут ещё есть момент — сервер для чат-бота. Когда-то раньше для работы бота нужно было указывать адрес на сервере, который будет принимать запросы от пользователей. Но несколько лет назад разработчики телеграмма сделали так, что сама программа может работать как сервер. Поэтому сейчас можно сделать бот без внешнего сервера.

Как работает чат-бот (echo-бот)

Есть два варианта. Первый — это когда у вас есть внешний сервер, на нём размещается скрипт, который и будет обрабатывать запросы к боту. Как правило здесь используется именно PHP, поскольку хостингов с Python не так много, да и настраивать их ещё то удовольствие.

Поэтому есть второй вариант — когда роль сервера для бота выполняет сама компьютерная программа Telegram. Когда она запущена, то бот будет работать. Если её закрыть, то уже нет. Обработчик бота мы напишем на Python — эта программа сама сможет «перехватывать» все запросы бота. То есть включили telegram, запустили python-программу — вуаля! — бот работает!

Регистрация бота

Вначале нужно зарегистрировать бота. Для этого вводим в поисковой строке telegram @BotFather , после стандартные шаги по подсказкам. В Сети полно примеров, я не буду их приводить, поскольку всё слишком примитивно. Главное на выходе получить уникальный код бота — строка примерно такого вида:

3243211:JsdfjhsdfuejhD-efasdkhJGHg3854

Её нужно сохранить и никому не показывать.

Используем pyTelegramBotAPI

Для программы будем использовать pyTelegramBotAPI. Установить её можно с помощью PIP:

pip install pytelegrambotapi

Если не хотите засорять общий каталог программ, то используйте Виртуальное окружение Python.

Для удобного запуска python-программы в виртуальном окружении можно сделать bat-файл:

call myvenv\Scripts\activate.bat python echo_bot.py

Саму программу мы разместим в файле echo_bot.py .

import telebot bot = telebot.TeleBot("здесь код бота") print('Start bot Ok') @bot.message_handler(commands=['start', 'help']) def send_welcome(message): bot.reply_to(message, "Привет!") @bot.message_handler(func=lambda message: True) def echo_all(message): # bot.reply_to(message, message.text) bot.send_message(message.chat.id, 'Как дела? :)') print('echo_all') # вывод в консоль bot.infinity_polling()

Это начальный каркас программы. Запустите её, после этого в боте введите команду /start или /help . В ответ будет выведен текст Привет! .

Для работы бота используются функции-декораторы. В нашем примере @bot.message_handler принимает команды, на которые сработает наша функция. Для ответа используется bot.reply_to (с репликой) или bot.send_message (просто текст).

Функция bot.infinity_polling() запускает сервер, который будет активным, пока не закрыть программу. Этот сервер сам соединяется с программой telegram — что для нас жирный плюс.

Дальше так: вы добавляете в бот команды и в функциях формируете ответ пользователю. pyTelegramBotAPI достаточно мощный модуль с помощью которого можно решать много задач.

Создание Telegram бота на Python для признаний в любви

Используем свои знания Python для достижения счастья в личной жизни.

Мы постоянно слышим о людях, использующих программирование, чтобы анализировать эффективность определенных лекарств, делать выводы, оценивать профили клиентов, делать прогнозы, узнавать, сколько будет стоить недвижимость через 10 лет. Этот список можно продолжать до бесконечности.

Когда я был в разгаре ухаживания за девушкой, меня внезапно поразила мысль, можно ли использовать программирование, чтобы сделать признание в любви каким-то особенным, тем более что девушка не была знатоком в этой области. (Если ваша девушка как раз эксперт, вам придется потрудиться, чтобы ее впечатлить).

Эти случайные мысли постепенно превратились в твердую идею, которая и привела к созданию этого Telegram бота. Я надеюсь, что эта статья поможет вам признаться в любви или сделать романтическое свидание незабываемым. Некоторые могут сказать, что я порчу рынок. Но я уверен, что когда дело доходит до признания в своих чувствах, это должно быть особенным и запоминающимся.

Получение API ключа для Telegram бота от BotFather

Для создания бота я использую язык программирования Python.

Как известно большинству программистов, для взаимодействия с внешним сайтом или приложением нам понадобится ключ интерфейса прикладного программирования (API ключ). В нашем случае он нужен, чтобы Python мог общаться с Telegram.

Перед этим нам нужно будет создать бота в Telegram. Для этого в приложении Telegram найдите бота под названием «BotFather».

После запуска бота нам будет показан список всех доступных команд. Для создания нового бота нужно использовать команду /newbot .

Далее BotFather предложит вам ввести имя для вашего бота. Обратите внимание на то, что именно по этому имени люди будут искать ваш бот в Телеграм. Впрочем, впоследствии вы сможете это имя менять.

Указав имя бота, нужно задать имя пользователя. Оно должно оканчиваться на слово bot, то есть быть в формате xxxbot. Заметьте, что изменить это имя в дальнейшем будет нельзя.

Как только ваш бот будет создан, вы сможете найти его в Telegram по имени (в моем случае это myfirstbot123).

Далее нам надо скопировать куда-нибудь в безопасное место уникальный токен, предоставленный нам для управления ботом при помощи API.

Интеграция Python с Telegram

Получив ключ API, мы можем приступить к созданию бота на Python.

Мы применим библиотеку python-telegram-bot. Эта библиотека использует модуль logging, который сперва надо настроить. А затем мы сохраним в коде наш API ключ Telegram.

# импортируем необходимые библиотеки import logging from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackQueryHandler, CallbackContext from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update # настраиваем модуль logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') # сохраняем наш api токен TOKEN = 'INSERT YOUR TOKEN HERE!'

Далее зададим несколько функций, которые помогут нам начать работу с нашим ботом.

Первая необходимая команда — это /start . Эта команда выполняется, когда пользователь запускает бот. Для простоты давайте при запуске бота просто вернем сообщение «Testing 123». Мы встраиваем это сообщение с помощью метода update.message.reply_text . Благодаря этому всякий раз, получая команду или сообщение, наш бот будет отвечать на него текстом.

То же самое мы делаем для команды /hello , которая возвращает сообщение Hello World! и смайлик ?, как только пользователь запустит ее. Справочник по юникодам эмодзи вы можете найти здесь. Обратите внимание, что для облегчения отладки я также настроил регистратор ошибок, чтобы мне всегда показывалось сообщение об ошибке.

def start(update, context): # посылает сообщение в ответ на команду /start update.message.reply_text('Testing 123') def hello(update, context): # посылает сообщение в ответ на команду /hello update.message.reply_text('Hello World! \U0001F600') # для отладки def error(update, context): logger.warning('Update "%s" caused error "%s"', update, context.error)

На последнем шаге создадим функцию main() . Метод Updater считает наш API-ключ и зарегистрирует все обработчики, которые мы настроили для нашего бота. Обратите внимание, что для каждой команды, которую мы собираемся создать, нам нужно будет добавить обработчик этой самой команды. Бот запустится при запуске updater.start_polling() .

# to start the bot def main(): # setup updating together with our telegram api token updater = Updater(TOKEN, use_context=True) # get the dispatcher to register handlers dp = updater.dispatcher # add command handlers for different command dp.add_handler(CommandHandler("start", start)) dp.add_handler(CommandHandler("hello", hello)) # error logging dp.add_error_handler(error) # start the bot updater.start_polling() # set the bot to run until you force it to stop updater.idle() if __name__ == '__main__': main()

Собрав все воедино, протестируем нашего бота в Telegram. Запускаем бота и получаем сообщение Testing123. Аналогично, в ответ на команду /hello мы получаем сообщение Hello World! ?.

Программируем кнопку yes/no

В случае признания в любви мы ждем однозначного ответа: «да» или «нет». Пока что наш Telegram бот может возвращать сообщения только после того, как пользователь выполнит определенную команду. Есть ли у бота возможность отображать меню, чтобы пользователь мог выбрать и нажать нужную кнопку? Да, в Telegram боте есть такая функция. Она так и называется — buttons (кнопки).

Чем же кнопки отличаются от команд, которые мы программировали выше? Тем, что для кнопки нам нужно написать две функции: одну для отображения кнопок после того, как пользователь запустит команду, а вторую — для возврата определенных результатов на основе выбора пользователя.

Приведенный ниже код даст нашему боту возможность отобразить вопрос “BE MY GIRL OK?” (думаю, эти слова любви в переводе не нуждаются — прим. переводчика) вместе с двумя кнопками «YES» и «NO» при запуске команды /confession . Не забудьте добавить обработчик этой команды в основной код функции, как указано выше.

# отображение кнопки def confession(update, context: CallbackContext)-> None: keyboard = [ [InlineKeyboardButton("Yes", callback_data='yes'), InlineKeyboardButton("No", callback_data='no')] ] reply_markup = InlineKeyboardMarkup(keyboard) update.message.reply_text('BE MY GIRL OK?', reply_markup=reply_markup) dp.add_handler(CommandHandler("confession", confession))

Как можно увидеть из данного скриншота, сообщение “BE MY GIRL OK?” отображается вместе с двумя кнопками.

Нажатие на эти кнопки в настоящий момент нам ничего не даст, поскольку мы этот процесс еще не настроили. Для этого мы настроим другую команду — /confession_reply . Она будет работать в зависимости от нажатия пользователем определенных кнопок (а именно «YES» или «NO»), используя программный синтаксис if-else.

Если пользователь нажимает Yes, то мы отвечаем вот таким вот эмодзи: .

В ответе на нажатие No я позволил себе некоторую дерзость. Мой ответ будет: “Please try again, we make typing errors sometimes ? (Пожалуйста, попробуйте еще раз, ведь мы иногда делаем опечатки)”.

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

def confession_reply(update, context): query = update.callback_query if query.data == 'yes': context.bot.edit_message_text(chat_id=query.message.chat_id, message_id=query.message.message_id, text='\U0001F46B\U0001F49D', disable_web_page_preview = 0) else: context.bot.edit_message_text(chat_id=query.message.chat_id, message_id=query.message.message_id, text='Please try again, we make typing errors sometimes \U0001F624' , disable_web_page_preview = 0) dp.add_handler(CallbackQueryHandler(confession_reply))

Как можно заметить на скриншоте, я настроил своего бота вот так, но вы должны проявить творческий подход и придумать что-нибудь свое.

Размещение Telegram бота (необязательно)

Эта часть в принципе является необязательной. Но до сих пор мы запускали нашего бота с локального компьютера, а это значит, что как только мы его выключим, он прекратит свою работу. Чтобы решить эту проблему, нам нужно разместить нашего бота на облачном сервере, которой обеспечит его бесперебойную работу в режиме 24/7. И когда придет время свидания, он нас не подведет.

Лично я для развертывания бота использовал сервис Heroku, предлагающий бесплатные услуги для пользователей, которым не требуется высокая пропускная способность. Мы здесь не будем вдаваться в подробности, так как в интернете уже имеется множество руководств про то, как это лучше сделать.

Идея признания в любви

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

Как видно на моем скриншоте ниже, после запуска команды /start будет отображаться приветственное сообщение и список команд, в которых первые 10 будут отвечать на сообщения, а последняя будет командой с кнопками, с помощью которой я и задам решающий вопрос.

Возможно вам интересно, что я написал для каждой из первых десяти команд и какие сообщения будут возвращаться при их вызове. На самом деле они просто являются небольшими воспоминаниями о наших предыдущих свиданиях. Это выглядит примерно так:

И вы также можете задаться вопросом, почему названия команд такие странные, например как /sob , /banhmi или даже /potato ? И почему между командами такие странные интервалы? Ответ дается в моей последней команде /throwback .

Как видно из последнего скриншота, я дал командам такие имена, чтобы из их последних букв сложилась фраза: “BE MY GIRL OK?”. Чтобы к тому моменту, когда моя подруга уже догадается об истинном смысле этого бота, она нажала на последнюю команду /semolaide (на китайском языке это значит «Что это») и получила решающий вопрос.

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *