电报对话框中的Wolframalpha计算器

理念



在电报对话框中,我经常使用电报bot:inlatexbot它允许您将Latex直接插入到电报对话框中-这很方便:可以用清晰的图片发送数学符号,以便

42X1个3=1024

,而不是sqrt(4)* 2 ^ x * 1/3 = 1024

但是不少时候,我需要电报中的WolframAlpha功能:为与朋友的聚会,各种百分比计算复杂的账单,求解方程式等等-WolframAlpha的全部功能,但同时不要离开电报对话。



Wolfram连接



我找到了适用于python的Wolfram Alpha API(https://pypi.org/project/wolframalpha/)。该文档非常清晰,您可以执行Web版本中可用的所有操作。的确,免费Wolfram API的限制为每月2,000个请求。适用于钨的代码非常简单,对我来说分四行显示。



import wolframalpha
client = wolframalpha.Client('TOKEN')
res = client.query(query)
print(next(res.results).text)


在前两行中,我导入wolframalpha模块,使用我的APP ID创建一个客户端-您必须先向wolfram注册并获取它,然后才能向钨发送请求,并仅打印Wolfram Alpha收到的结果。一切正常-现在您可以开始与Telegram集成。



集成到Telegram机器人



仍然需要将所有内容连接在一起,并将从Telegram收到的请求发送到Wolfram并向用户提供答案。我在@BotFather中创建了一个漫游器,请在设置中打开内联模式,以便该漫游器可以在“电报”对话框中正常运行。我使用了一个来自GitHub在线机器人的示例来进行Telegram,并将响应发送给用户。这就是代码最重要的部分。



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电报中的机器人不仅简化了计算的过程,而且简化了各种证明的过程,例如,您可以找出莫斯科的人口或一个人的平均体重,并且该机器人可以在某种意义上改变通讯方式:不再需要计算器,Wikipedia或其他来源的屏幕截图-现在,所有内容可以通过对话访问。







下一步是什么?



到目前为止,该漫游器在本地工作,每月仅支持2,000个请求,对于公众使用来说很小。我计划修改它以供需要它的每个人大量使用:学生,科学家,只是需要计算或证明电报中正确内容的人。如果您有任何改进的想法或建议(由于该机器人是在几个小时内编写的,则很有可能会通过电子邮件发送给我):rk-helper@yandex.ru



All Articles