Если вы когда-либо пользовались онлайн-форумом, вы, возможно, видели, что иногда есть способы публиковать сообщения не только непосредственно на форуме, но и, например, через электронную почту.
В данной статье мы создадим общедоступную доску объявлений. Особенностью этой доски будет то, что пользователи смогут посылать свои объявления Telegram-боту, не заходя на сам сайт.
Сообщения будут просто содержать текст, но мы предоставим дополнительную информацию о том, как использовать другие данные, например, имена пользователей. Реализацию этого мы оставим вам в качестве упражнения по расширению функциональности.
Необходимые приготовления
Для получения максимальной пользы от этого руководства читателю нужно:
- знать язык программирования Python
- иметь аккаунт в Телеграм и установить клиентскую часть на свой компьютер
- иметь аккаунт в Replit или создать его прямо сейчас.
Также было бы полезно, если бы вы были знакомы с базой данных Replit, но это не критично.
Как создать магазин в Telegram. Чат-бот с приёмом платежей. Доставка еды.
Регистрация бота
Для начала нам нужно зарегистрировать нашего бота в Telegram, чтобы сгенерировать учетные данные, которые мы будем использовать для подключения к Telegram API. Каждый бот должен быть привязан к конкретной учетной записи пользователя. Это можно сделать с помощью официального управляющего бота Telegram под названием «BotFather».
Для активации BotFather нажмите на кнопку Start :
Для начала рабочего процесса создания нового бота мы должны отправить в BotFather команду /newbot .
Бот у нас спросит следующие данные:
Замечание: полезно иметь короткое имя пользователя, чтобы людям было удобно его вводить. Особенно, если вы планируете добавить встроенный режим.
Как только мы ответим на все вопросы, BotFather отправит нам наш токен аутентификации, который будет выглядеть примерно так:
Обратите внимание, что вся строка (до двоеточия и после) является токеном.
Создание интерфейса бота
Теперь мы можем приступить к написанию той части программы, которая обрабатывает запросы из Telegram. Создадим новую repl-среду, а в качестве языка программирования выберем Python.
Наш бот должен взаимодействовать с Telegram. Для этого нам понадобится доступ к Telegram REST API. Есть много способов сделать это, но в рамках данной статьи мы будем использовать удобную библиотеку, обернутую обернута вокруг API.
Прежде чем мы продолжим, нам нужно сделать наш токен доступным для использования нашим ботом. Создайте переменную среды под названием TOKEN , щелкнув значок замка на боковой панели, как показано ниже, и вставьте свой токен бота, который вы получили ранее, например 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5 :
Как создать чат-бот для продажи полезного контента. Чат-бот с приёмом платежей.
Это гарантирует, что наш токен доступен как переменная среды и что к нему не смогут получить доступ люди, имеющие доступ к нашей среде repl (в бесплатной версии она открыта для всех, — прим. переводчика).
Создание скелета бота
Теперь, когда все настроено, мы можем приступить к программированию! Начнем с нашего файла main.py :
import os from telegram import Update #upm package(python-telegram-bot) from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext #upm package(python-telegram-bot) def help_command(update: Update, context: CallbackContext) -> None: htext = »’ Welcome Send a message to store it. Send /fetch to retrieve the most recent message»’ update.message.reply_text(htext) def main(): updater = Updater(os.getenv(«TOKEN»)) dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler(«start», help_command)) dispatcher.add_handler(CommandHandler(«help», help_command)) updater.start_polling() updater.idle() if __name__ == ‘__main__’: main()
Сначала мы импортируем модуль os , чтобы получить доступ к токену как переменной окружения.
Затем мы импортируем некоторые классы из библиотеки Telegram.
Комментарии, начинающиеся с #upm , не являются обязательными. Они используются Replit для загрузки правильного пакета. В общем случае это не нужно, но здесь необходимо, потому что подобных библиотек Telegram очень много.
Функция help_command запускается всякий раз, когда пользователь отправляет нам команду /start или /help . Команда /start также выполняется автоматически, когда новый пользователь запускает ваш бот (как мы ранее запускали BotFather ). Бот будет знать, как использовать эту функцию, потому что мы сообщим ему об этом позже в теле функции main .
В функции main мы инициализируем экземпляр класса updater , который использует наш токен.
updater = Updater(os.getenv(«TOKEN»))
Updater — это класс, который будет постоянно проверять Telegram на наличие новых сообщений в нашем боте.
Когда updater получает новое сообщение, он передает его в класс dispatcher . Тот проверяет, есть ли у нас подходящий обработчик для данного сообщения. Как уже упоминалось выше, нужно задать обработчик для команд /start и /help . Мы cделаем это при помощи функции add_handler , например:
dispatcher.add_handler(CommandHandler(«start», help_command))
dispatcher.add_handler(CommandHandler(«help», help_command))
Чтобы не усложнять задачу, команда /start и команда /help имеют здесь один и тот же обработчик, но при желании для обработки каждой из них вы можете использовать разные функции.
Затем нам нужно сказать классу updater , чтобы он начал проверку новых сообщений. Мы это сделаем при помощи следующей строки.
updater.start_polling()
Важно знать, что start_polling — это неблокирующая функция. Это означает, что код в ней не прекращает выполнение. Он будет исполняться, пока программа не завершится.
Другими словами, если мы оставим это в качестве последней строки функции main , код будет выполнен, а затем немедленно завершится, потому что больше ничего не блокирует его. Поэтому, чтобы наш бот не прекращал прослушку, мы используем строку updater.idle() , чтобы заблокировать скрипт, пока мы слушаем.
Функционал для логирования
Согласно тексту справки, бот должен уметь делать две вещи:
- Если вы отправляете сообщение боту, он должен где-то его сохранить.
- При отправке боту команды /fetch он должен отправить вам последнее сообщение.
Для этого мы будем использовать встроенную в Replit базу данных ключ-значение. Начнем с импорта API:
from replit import db
Модуль db — это объект, который ведет себя как словарь, но сохраняет свое содержимое между запусками. Он также сериализует свои ключи в виде строк.
Мы хотим хранить зарегистрированные сообщения в определенном порядке, но объект db по своей сути не упорядочен (будучи словарем). Поэтому мы создадим вспомогательную функцию, которая может получать самый большой ключ (при условии, что мы будем использовать только числовые индексы). Добавим эту функцию перед определением функции help_command :
def latest_key(): ks = db.keys() if len(ks): return max(map(int, ks)) else: return -1
Функция latest_key получает все ключи из нашей базы данных (модуль db ). Если в ней есть ключи, они преобразуются в целые числа и возвращается максимальное из них. Если ключей нет, то возвращается -1 .
Теперь мы можем создать обработчик, который записывает сообщения пользователей в базу данных. Добавим эту функцию после задания функции help_command :
def log(update: Update, context: CallbackContext) -> None: db[str(latest_key() + 1)] = update.message.text
Этот обработчик получает последний ключ из базы данных, увеличивает его на единицу и создает новую пару ключ — сообщение.
Однако это не может быть выполнено, пока мы не зарегистрируем обработчик. Поэтому добавьте следующую строку после других строк dispatcher.add_handler (. ) :
dispatcher.add_handler(MessageHandler(Filters.text None: update.message.reply_text(db.get(str(latest_key()), ‘No Messages yet.’))
Мы можем зарегистрировать его вместе с обработчиками остальных команд. Добавьте данную строку после уже существующих строк dispatcher.add_handler (. ) :
dispatcher.add_handler(CommandHandler(«fetch», fetch))
Создаем веб-интерфейс
Теперь, когда у нас есть вполне функциональный бот, нам нужно добавить для него веб-интерфейс. Мы будем использовать фреймворк Flask. Мы должны включить следующий код после других операций импорта и перед определением функции latest_key .
Этот код создает небольшое Flask-приложение. Импорт модуля Flask обеспечивает среда программирования Replit. В этом уроке мы сделаем только одну страницу.
Но пока это работать не будет, потому что шаблон home.html еще не существует. Давайте создадим его прямо сейчас в папке с названием templates (т.е. templates/home.html ):
Этот шаблон будет выводить страницу записанных сообщений и ссылки на следующую или предыдущую страницу. Он требует наличия переменной page и массива messages , который будет отображаться в виде списка. Шаблон также принимает переменные «prev_page» и «next_page», которые мы используем для создания ссылок на предыдущую и следующую страницу, если они существуют, конечно. Все они присутствуют в нашей функции маршрутизации, когда мы запускаем render_template .
Как нам рассчитать максимальное количество страниц?
pages = ceil(len(ks) / 10)
То есть мы делим количество ключей в нашей базе данных Replit на десять и округляем его в большую сторону. Мы также можем использовать это число по умолчанию. Таким образом, если кто-то вызовет простой маршрут « / », мы просто отобразим последнюю страницу.
if page is None: page = pages
Мы знаем, что последние сообщения всегда будут «самыми последними», потому что мы отсортировали их в порядке возрастания в предыдущей строке.
Переменные prev_page и next_page всегда содержат в себе значение текущей страницы, уменьшенное либо соответственно увеличенное на единицу, если они являются действительными номерами страниц. В противном случае им присваивается значение None , чтобы шаблон их не отображал.
Собираем все воедино
Если мы запустим нашу программу сейчас, веб-приложение Flask еще не будет работать. Flask должен прослушивать запросы аналогично библиотеке Telegram. Чтобы запустить сервер Flask, мы вполне можем в конце нашей программы использовать app.run() .
Проблема в том, что эта строка кода при нормальных обстоятельствах никогда не будет достигнута, потому что у нас есть строка updater.idle() , блокирующая наш код до нее. Чтобы решить эту проблему, мы можем заменить эту строку строкой, которая запускает наш сервер Flask на первом уровне. Строка updater.idle() у нас присутствовала лишь для того, чтобы предотвратить преждевременное завершение программы. Теперь то же самое будет делать сервер Flask . Итак, давайте произведем замену:
#updater.idle() app.run(host=’0.0.0.0′, port=8080)
Параметры host и port , установленные в эти значения, позволяют среде Replit получить доступ к серверу и обычно будут отображать окно с содержимым нашей страницы. Теперь мы можем просматривать сообщения, отправленные пользователями через бот.
Сделайте все это сами
Если вы точно следовали нашим инструкциям, у вас уже есть собственная версия repl с работающим кодом. В противном случае попробуйте еще раз.
Что дальше?
Попробуйте использовать команду /setcommands в BotFather , чтобы добавить быстрое меню для команд в вашем боте. Здесь описаны все команды по работе с этим ботом.
Если бы мы хотели получить доступ к имени пользователя — отправителя сообщения, мы могли бы получить к нему доступ так же, как и к тексту сообщения:
username = update.message.from_user.username
Для изучения возможностей по получению дополнительных данных изучите, пожалуйста, документацию.
Источник: pythonist.ru
Как написать telegram-бота на python с помощью библиотеки telebot
Как написать telegram-бота на python с помощью библиотеки telebot
Установка и настройка
Для начала давайте скачаем сам python. Сделать это можно на официальном сайте. Не забудьте поставить галочку add to PATH во время установки! После установки python’a нам понадобится хороший редактор кода. На помощь приходит компания JetBrains со своим бесплатным PyCharm.
Мы уже близко, осталось скачать библиотеку telebot. Для этого заходим в командную строку и пишем:
pip install pytelegrambotapi
Если всё прошло успешно, мы можем продолжать!
VPN
Думаю все знают о блокировки telegram в России и единственным решением как всегда остаётся vpn. Лично я рекомендую NordVPN.
Bot Father
В поиске telegram находим Bot Farher’a и создаем своего бота с помощью команды /newbot. Затем вводим имя и юзернейм. Обратите внимание, что юзернейм должен оканчиваться на bot!
Как вы видите нам выдали специальный api токен, с помощью которого вы сможете управлять своим ботом (в моём случае это: 776550937:AAELEr0c3H6dM-9QnlDD-0Q0Fcd65pPyAiM). Свой токен Вы можете запомнить, но я рекомендую его записать.
Код
Настал момент, которого ждали все. Открываем PyCharm и создаем новый проект.
Тут рекомендую поставить всё как у меня (название, конечно можно изменить). После создания проекта, давайте создадим файл, в котором будет наш код. Кликните правой кнопкой по папке с вашем проектом, затем New → Python File. Отлично, начнем писать код. Импортируем библиотеку telebot, с помощью:
import telebot
Теперь нужно создать переменную bot. На самом деле имя переменной может быть каким угодно, но я привык писать bot.
bot = telebot.TeleBot(‘ваш токен’)
Напишем декоратор 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 вы можете в официальной документации.
keyboard1 = telebot.types.ReplyKeyboardMarkup(True, True)
Ну а на этом всё! Конечно, это не все возможно ботов в telegram, но основные возможности я вам показал. Спасибо за внимание.
Что такое message?
Наверное многие, кто писал бота по моей предыдущей статье задались вопросом, что такое message и почему к примеру, чтобы отправить сообщение мы должны указать message.chat.id в параметрах функции send_message? Для того, чтобы узнать это давайте выведем message в консоль:
Теперь когда мы вводим команду /start, наш бот присылает огромное кол-во информации. Все, что мы сейчас получили — это ответ в формате json. Json — это простой формат для хранения структурированных данных. Все выводится в формате: ‘ключ’: значение. Давайте посмотрим на то, что получил я:
< ‘content_type’:’text’, ‘message_id’:573, ‘from_user’:< ‘id’:687595402, ‘is_bot’:False, ‘first_name’:’Dmitry’, ‘username’:’dimagorovtsov’, ‘last_name’:’Gorovtsov’, ‘language_code’:’ru’ >, ‘date’:1565206363, ‘chat’:< ‘type’:’private’, ‘last_name’:’Gorovtsov’, ‘first_name’:’Dmitry’, ‘username’:’dimagorovtsov’, ‘id’:687595402, ‘title’:None, ‘all_members_are_administrators’:None, ‘photo’:None, ‘description’:None, ‘invite_link’:None, ‘pinned_message’:None, ‘sticker_set_name’:None, ‘can_set_sticker_set’:None >, ‘forward_from_chat’:None, ‘forward_from’:None, ‘forward_date’:None, ‘reply_to_message’:None, ‘edit_date’:None, ‘media_group_id’:None, ‘author_signature’:None, ‘text’:’/start’, ‘entities’:[ ], ‘json’:< ‘message_id’:573, ‘from’:< ‘id’:687595402, ‘is_bot’:False, ‘first_name’:’Dmitry’, ‘last_name’:’Gorovtsov’, ‘username’:’dimagorovtsov’, ‘language_code’:’ru’ >, ‘chat’:< ‘id’:687595402, ‘first_name’:’Dmitry’, ‘last_name’:’Gorovtsov’, ‘username’:’dimagorovtsov’, ‘type’:’private’ >, ‘date’:1565206363, ‘text’:’/start’, ‘entities’:[ < ‘offset’:0, ‘length’:6, ‘type’:’bot_command’ >] > >
К примеру из всей этой информации мы хотим получить id чата, из которого я отправлял сообщение. Для этого обратимся к ключу chat.
print(message.chat)
687595402, ‘title’: None, ‘all_members_are_administrators’: None, ‘photo’: None, ‘description’: None, ‘invite_link’: None, ‘pinned_message’: None, ‘sticker_set_name’: None, ‘can_set_sticker_set’: None>
Смотрите, у ключа chat есть еще несколько ключей: first_name, last_name, username… и у каждого из них есть свои значения. Теперь обратимся к ключу id:
print(message.chat.id)
Как вы видите для того чтобы получить нужное значение необходимо просто записать название ключей через точку. А теперь смотрим на ответ от сервера:
687595402
Все идет как надо! Мы получили id чата, собственно как и хотели! А теперь получим имя отправителя. Тут, как вы заметили нужно использовать ключ from_user.
print(message.from_user)
687595402, ‘is_bot’: False, ‘first_name’: ‘Dmitry’, ‘username’: ‘dimagorovtsov’, ‘last_name’: ‘Gorovtsov’, ‘language_code’: ‘ru’>
Теперь достанем значение у ключа first_name:
print(message.from_user.first_name)
Ну вот и все! За пару секунд мы смогли получить id чата и мое имя в telegram. И еще раз, для тех кто не понял:
Чтобы получить значение ключа first_name, нам нужно сначала обратиться к ключу chat, а только потом уже к first_name!
Теперь смотрите, для того, чтобы отправить сообщение в какой-либо чат нам необходимо указать несколько параметров в функцию send_message. Первый параметр — это chat_id, собственно сам id чата. Второй — text, текст сообщения. И как вы догадались, вместо того, чтобы писать message.chat.id, мы можем написать свои данные! Вот так можно прислать сообщение самому себе, если указать в параметрах свой id:
bot.send_message(, ‘Текст сообщения’)
Ну а когда мы пишем message.chat.id, мы подразумеваем, что бот отправит сообщение в чат, из которого его вызвали.
Заключение
Ну а на этом всё! Надеюсь вы поняли как получать данные от сервера, обрабатывать их и использовать где нужно. Спасибо за внимание.
Источник: bookflow.ru
Простые боты для Telegram на Python в Google Colab
Рассмотрим разработку и запуск ботов для мессенджера Телеграм. В качестве языка разработки будет использоваться Python. Запускать код на выполнение будем в рабочих тетрадках (блокнотах) замечательной среды разработки Colab компании Google. Код бота, размещенный в Colab, будет взаимодействовать c сервером Telegram через API.
Telegram (от др.-греч. τῆλε «далеко» + др.-греч. γράμμα «запись») — кроссплатформенная система мгновенного обмена сообщениями (мессенджер) с функциями VoIP, позволяющая обмениваться текстовыми, голосовыми и видео- сообщениями, стикерами и фотографиями, файлами многих форматов. Также можно совершать видео- и аудио- звонки и трансляции в каналах и группах, организовывать конференции, многопользовательские группы и каналы. Клиентские приложения Telegram доступны для Android, iOS, Windows Phone, Windows, macOS и Linux.
API (МФА [ˌeɪ.piˈaɪ]; аббр. от англ. Application Programming Interface — «программный интерфейс приложения») — описание способов (набор классов, процедур, функций, структур или констант), которыми одна компьютерная программа может взаимодействовать с другой программой. Обычно входит в описание какого-либо интернет-протокола, программного каркаса (фреймворка) или стандарта вызовов функций операционной системы. Часто реализуется отдельной программной библиотекой или сервисом операционной системы. Используется программистами при написании всевозможных приложений.
Бот (англ. bot, сокращение от чеш. robot) — виртуальный робот, который функционирует на основе специальной программы, выполняющий автоматически и/или по заданному расписанию какие-либо действия через интерфейсы, предназначенные для людей. Боты находят также применение в условиях, когда требуется лучшая реакция по сравнению с возможностями человека (например, игровые боты, боты для интернет-аукционов и тому подобное) или, реже, для имитации действий человека (например, боты для чатов и тому подобное). Чат-бот может выдать достаточно адекватный ответ на вопрос, сформулированный на правильном русском языке (или любом другом, работа с которым поддерживается). Такие боты часто применяются для сообщения прогноза погоды, результатов спортивных соревнований, курсов валют, биржевых котировок и тому подобное.
Чат-бот — это программа, работающая внутри мессенджера, например Telegram. Такая программа способна отвечать на вопросы, а также самостоятельно задавать их. Чат-боты используются в разных сферах для решения типовых задач.
C точки зрения прикладной информатики (и прикладной информатики в экономике в частности), создание чат-бота — это не только следование последним тенденциям. Прежде всего, речь идёт о сокращении затрат, увеличении конверсии и улучшении качества обслуживания клиентов. Сотни компаний делают всё возможное, чтобы достичь вышеупомянутых целей. И для их достижения необходимы боты как первостепенный инструмент.
Согласно текущей статистике за 2022 год, недвижимость является ведущей отраслью по прибылям от чат-ботов (28 %). Затем идут путешествия (16 %), образование (14 %), здравоохранение (10 %) и финансы (5 %).
Чат-боты могут использоваться в службах поддержки, помогая решить простые вопросы, например, такие как смена пароля.
Чат-боты можно использовать для поиска информации. Например, прогноз погоды, афиша мероприятий.
В сфере путешествий стали одними из первых использовать чат-боты. Чат-бот может предложить направления/рейсы/рестораны — на основании поисковых запросов и предпочтений пользователя. После покупки программа обеспечивает клиентскую поддержку, предоставляя ответы на часто задаваемые вопросы.
Практическая часть
Чтобы создать бота, нам нужно дать ему название, адрес и получить токен — цифро-символьную строку, которая будет однозначно идентифицировать бота.
Необходимо найти бота, нажать кнопку «Запустить» (или написать /start), в ответ BotFather пришлет список доступных команд.
Отправим боту команду /newbot, чтобы создать нового бота. В ответ он попросит ввести имя будущего бота, его можно писать на русском. После ввода имени нужно будет изобрести адрес бота, причем он должен заканчиваться на слово bot. Например, drach_pro_bot. Если адрес уже кем‑то занят, придётся придумывать новый.
Когда бот будет создан, мы получим сообщение, в котором будет исчерпывающая техническая информация о боте. Обратите внимание, что после фразы Use this token to access the HTTP API будет написана строка из букв и цифр — это токен.
Реализуем бота для Telegram, воспользовавшись возможностями языка Python. Понятно, что чтобы бот всегда работал, его код должен быть запущен и выполняться 24 часа в сутки. Значит, потребуется сервер (для надежности под операционной системой Linux), на котором установлен Python. Если такого сервера нет, можно запускать код на собственной домашней машине, но тогда придётся повозиться с настройками роутера. Но есть ещё один интересный вариант, который очень подходит для тестирования и изучения ботов — это Colab.
Работать будем в рабочей тетради Colab, так как это нам даёт замечательные преимущества: не надо устанавливать собственный сервер в Интернет и не надо перенастраивать домашний роутер.
Далее в рабочей тетради Colab проверяем версию Python. Чтобы операция выполнялась на уровне операционной системы (а не языка программирования), перед командой ставим восклицательный знак:
!python3 —version
Должны получить ответ вида:
Python 3.7.13
Для взаимодействия с Telegram API средствами языка Python разработаны несколько модулей. Самый простой из них — Telebot. Устанавливаем необходимый пакет:
!pip3 install pytelegrambotapi
В редчайших случаях, возможно, понадобится написать просто pip вместо pip3.
Задача 1. ЭХО
Сначала реализуем простейшего бота – для понимания процесса. Он будет получать от пользователя текстовое сообщение и возвращать его же. Используем код:
Для запуска бота в Colab нажимаем Ctrl+F9.
Если всё запустилось без ошибок, переходим в Telegram – проверять работу бота. Ищем бота по придуманному ранее адресу. Запускаем бота кнопкой «Запустить» (Start) или командой /start. При правильной работе бот возвращает сообщения отправителю один-в-один.
Задача 2. Бот-всезнайка
Более сложный бот, который будет давать определения для введённых терминов. Черпать информацию будем из Википедии по той причине, что для этого уже разработан прекрасный модуль:
!pip3 install wikipedia
Используем следующий код и запустим его.
Задача 3. БОТ С ДВУМЯ ВИРТУАЛЬНЫМИ КНОПКАМИ
Во многих ботах для выбора каких‑то действий применяются так называемые виртуальные кнопки. Реализуем ветвление. Пользователь будет выбирать, что он хочет прочитать (например, афоризмы или новости).
Потребуется создать два файла: thinks.txt и facts.txt, которые содержат список сегодняшних новостей и афоризмы. Одна строка – одно утверждение. Лучше создать хотя бы три строки в каждом.
На данном этапе куда удобнее будет привязать Google drive (Гугл-диск) к Colab и загрузить туда текстовые документы.
Команда для привязки Гугл-диска:
from google.colab import drive
drive.mount(‘/content/drive’)
Важно! Если использовать для этого бота тот же токен, что и для предыдущего, то, чтобы увидеть кнопки, потребуется перезапуск командой /start.
Внимание! Кнопки могут не появиться, поэтому для вывода информации нужно будет написать “Новость” или ”Афоризм”. В идеальном случае, попробуйте решить проблему самостоятельно.
Задача 4. БОТ, ВЕДУЩИЙ КАНАЛ
Разработаем бота, который работает полностью в автоматическом режиме: по таймеру. На вход бот будет получать список анекдотов, которые затем будет отправлять в канал через заданный интервал времени. Потребуется создать свой канал в Telegram, добавить в подписчики канала нашего бота и назначить его администратором канала с правом публиковать сообщения.
Файл с анекдотами fun.txt загружаем на Гугл диск.
Задача 5. ЧАТ-БОТ
Разработаем чат‑бота, который будет поддерживать диалог с пользователем. Для этого мы подготовим файл dialog.txt, содержащий строки с вопросами и ответами на них в следующей строке. Вопрос будем помечать специальным образом в начале строки — u:, как показано ниже.
Меня зовут Снежана.
Пример входного файла можно скачать тут.
Для поиска похожих вопросов используем модуль fuzzywuzzy, который позволяет сравнивать, насколько похожи между собой две строки. Естественно, этот модуль нужно установить:
!pip3 install fuzzywuzzy
!pip3 install python-Levenshtein
Подробнее про теорию работы можно прочитать по ссылке: https://habr.com/ru/post/491448/
Ниже приведен исходный код бота. После его запуска инициируем диалог с ботом словом «Привет». Естественно, это не искусственный интеллект, и набор его ответов ограничен фразами из файла dialog.txt. Однако, чем больше входной файл, тем больше переписка с ботом будет напоминать осмысленный диалог.
ВЫВОДЫ
Разработаны и запущены пять простых ботов, на примере которых научились принимать и отправлять сообщения, реализовывать ветвление и понимать неточные запросы.
Источник: drach.pro