https://habr.com/ru/post/515146/Идея
В диалогах телеграма я очень часто использую телеграм бот:
inlatexbot. Он позволяет вставлять Latex прямо в диалоге телеграма — это удобно: математическое обозначение можно отправить понятной картинкой, чтобы было так
, а не так
sqrt(4)*2^x * 1/3 =1024.
Но не менее часто, мне в телеграме необходим функционал
WolframAlpha: посчитать сложный счет за вечеринку с друзьями, различные проценты, решить уравнение и так далее — полный функционал WolframAlpha, но при этом не выходить из диалога телеграма.
Подключение Wolfram
Я нашел Wolfram Alpha API для python (https://pypi.org/project/wolframalpha/). Документация предельно понятная и можно сделать все, что доступно в веб версии. Правда, есть ограничение бесплатного Wolfram API на 2000 запросов в месяц. Код, который работает с вольфрамом предельно простой и у меня вышел в 4 строки.
import wolframalpha
client = wolframalpha.Client('TOKEN')
res = client.query(query)
print(next(res.results).text)
В первых двух строчках я импортирую модуль wolframalpha, создаю client со своим APP ID — необходимо предварительно зарегистрироваться в wolfram и получить его, далее можно отправлять запросы к вольфраму и просто делаю принт результат того, что получил Wolfram Alpha. Все работает — теперь можно приступать к интегрированию с Telegram.
Интеграция в Телеграм бот
Осталось соединить все вместе и отправлять запросы, полученные из Телеграм в Вольфрам и выдавать ответ юзеру. Создаю бот в @BotFather, в настройках включаю режим inline, чтобы бот работал прямо в диалоге Телеграм. Использую
пример inline бота из
GitHub для Телеграм, и отправляю ответ юзеру. Вот как выглядит самая важная часть кода.
def inlinequery(update, context):
"""Handle the inline query."""
query = update.inline_query.query
print(query)
res = client.query(query)
results = [
InlineQueryResultArticle(
id=uuid4(),
title="Magic answer is here!",
input_message_content=InputTextMessageContent(
"{} => *{}*".format(query, next(res.results).text),
parse_mode=ParseMode.MARKDOWN))]
update.inline_query.answer(results)
Как это работает?
Очень просто — прямо в диалоге я ввожу @calcherebot 12 + 15 и мне выдает ответ
27. Бот в телеграме упрощает не только процесс подсчетов чего-либо, но и процесс различных доказательств, например можно узнать население Москвы или средний вес человека и бот в каком-то смысле меняет коммуникацию: больше не нужны скриншоты калькуляторов, википедии или других источников — теперь все может быть доступно в диалоге.
Что дальше?
Пока что бот работает локально и поддерживает всего лишь 2000 запросов в месяц, что очень мало для публичного использования. В моих планах его доработка для массового использования всем, кому это необходимо: студентам, ученым, просто людям которым нужно что-то посчитать или доказать прямо в телеграме. Если у вас есть идеи или пожелания по доработке( скорее всего они есть, так как бот был написан за пару часов) напишите мне на почту:
rk-helper@yandex.ru