✔Питоном по телеграму! Пишем пять простых Telegram-ботов на Python - «Новости»
www
При создании следующих ботов мы будем использовать несколько текстовых файлов с контентом. Скачать их можно с моего сайта.
Бот с двумя виртуальными кнопками
Во многих Telegram-ботах для выбора каких‑то действий используются так называемые виртуальные кнопки. Давай попробуем сделать себе такие же!
Предположим, что у нас есть два файла facts.
и thinks.
, которые содержат список интересных фактов и поговорки. На каждой строке файлов находится по одному факту или поговорке.
Сделаем бота, в котором будут две кнопки: «Факты» и «Поговорки». Если нажать любую, бот отправит пользователю соответствующее сообщение.
info
Если ты будешь использовать для этого бота тот же токен, что и для предыдущего, то, чтобы увидеть кнопки, перезапусти бота командой /
.
import randomfrom telebot import types# Загружаем список интересных фактовf = open('data/facts.txt', 'r', encoding='UTF-8')facts = f.read().split('n')f.close()# Загружаем список поговорокf = open('data/thinks.txt', 'r', encoding='UTF-8')thinks = f.read().split('n')f.close()# Создаем ботаbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather')# Команда start@bot.message_handler(commands=["start"])def start(m, res=False):# Добавляем две кнопкиmarkup=types.ReplyKeyboardMarkup(resize_keyboard=True)item1=types.KeyboardButton("Факт")item2=types.KeyboardButton("Поговорка")markup.add(item1)markup.add(item2)bot.send_message(m.chat.id, 'Нажми:nФакт для получения интересного фактаnПоговорка — для получения мудрой цитаты ', reply_markup=markup)# Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message):
# Если юзер прислал 1, выдаем ему случайный факт
if message.text.strip() == 'Факт' :answer = random.choice(facts)
# Если юзер прислал 2, выдаем умную мысль
elif message.text.strip() == 'Поговорка':answer = random.choice(thinks)
# Отсылаем юзеру сообщение в его чат
bot.send_message(message.chat.id, answer)# Запускаем ботаbot.polling(none_stop=True, interval=0)
Пример работы бота, знающего факты и поговорки Бот, ведущий Telegram-канал с анекдотами
Предыдущие боты посылали юзеру сообщения тогда, когда получали от него команды или фразы. Но что, если нам нужен бот, который будет периодически и в автоматическом режиме постить что‑то в наш канал?
Давай сделаем бота, который получает список анекдотов из файла и каждый час постит в канал один из этих анекдотов. Для этого нам нужно создать свой канал в Telegram, добавить в подписчики канала нашего бота и назначить его администратором канала с правом публиковать сообщения.
Файл с анекдотами должен лежать в папке data
рядом со скриптом бота.
import time# Токен, который выдает @botfatherbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather')# Адрес телеграм-канала, начинается с @CHANNEL_NAME = '@адрес_твоего_канала'# Загружаем список шутокf = open('data/fun.txt', 'r', encoding='UTF-8')jokes = f.read().split('n')f.close()# Пока не закончатся шутки, посылаем их в каналfor joke in jokes:
bot.send_message(CHANNEL_NAME, joke)
# Делаем паузу в один час
time.sleep(3600)bot.send_message(CHANNEL_NAME, "Анекдоты закончились :-(")
Пример работы бота, ведущего канал с анекдотами Чат-бот «Маша»
Теперь давай сделаем простейшего чат‑бота, который будет болтать с пользователем. Для этого мы подготовим файл boltun.
, содержащий строки с вопросами (в начале таких строк поставим метку u:
) и ответами на них в следующей строке.
u: как зовут
Маша меня зовут!
u: сколько тебе лет
Мне уже 18, честно-честно!
Файл boltun.
поместим в папку data
рядом со скриптом бота. Для поиска похожих вопросов используем модуль fuzzywuzzy, который позволяет сравнивать, насколько похожи между собой две строки. Естественно, сперва этот модуль нужно установить:
pip install fuzzywuzzy
pip install python-Levenshtein
Ниже приведен исходный код бота. После его запуска напиши боту «Привет» и попробуй с ним пообщаться. Естественно, это не искусственный интеллект и набор его ответов ограничен фразами из файла boltun.
.
import osfrom fuzzywuzzy import fuzz# Создаем бота, пишем свой токенbot = telebot.TeleBot('Здесь твой токен, полученный от @botfather')# Загружаем список фраз и ответов в массивmas=[]if os.path.exists('data/boltun.txt'):
f=open('data/boltun.txt', 'r', encoding='UTF-8')
for x in f:if(len(x.strip()) 2):mas.append(x.strip().lower())
f.close()# С помощью fuzzywuzzy вычисляем наиболее похожую фразу и выдаем в качестве ответа следующий элемент спискаdef answer(text):
try:text=text.lower().strip()if os.path.exists('data/boltun.txt'):a = 0n = 0nn = 0for q in mas:if('u: ' in q):# С помощью fuzzywuzzy получаем, насколько похожи две строкиaa=(fuzz.token_sort_ratio(q.replace('u: ',''), text))if(aa a and aa!= a):a = aann = nn = n + 1s = mas[nn + 1]return selse:return 'Ошибка'
except:return 'Ошибка'# Команда «Старт»@bot.message_handler(commands=["start"])def start(m, res=False):bot.send_message(m.chat.id, 'Я на связи. Напиши мне Привет )')# Получение сообщений от юзера@bot.message_handler(content_types=["text"])def handle_text(message):
# Запись логов
f=open('data/' + str(message.chat.id) + '_log.txt', 'a', encoding='UTF-8')
s=answer(message.text)
f.write('u: ' + message.text + 'n' + s +'n')
f.close()
# Отправка ответа
bot.send_message(message.chat.id, s)# Запускаем ботаbot.polling(none_stop=True, interval=0)
Пример работы чат‑бота Выводы
Мы написали пять простых ботов, на примере которых научились принимать и отправлять сообщения, делать кнопки и понимать неточные запросы.
В следующей статье мы рассмотрим работу с Telegram-ботами более подробно: научимся делать ботов, работающих через веб‑хуки, принимать оплату от пользователей и взаимодействовать с базой данных SQLite.
Также призываю тебя не откладывать и записываться на курс «Python для новичков», где мы от простейших понятий перейдем к созданию первых интересных проектов. Стартуем уже совсем скоро!
Курс по Python
Курс «Python с нуля» направлен на изучение основ и базовых концепций программирования. После него ты сможешь легко углубиться в любую из ИТ‑сфер: веб‑разработку, анализ данных, безопасность приложений и так далее. Продолжительность курса — два календарных месяца. Уроки будут проводиться два раза в неделю (вторник и четверг, ориентировочно в 17:00 по Москве), каждый по одному академическому часу. Периодически будут выдаваться домашние задания.
Записаться на курс