自动聊天机器人对于刺激交互非常有用。我们可以为 Slack、Discord 和其他平台创建聊天机器人。

在本文中,我将教您如何构建一个 Telegram 聊天机器人来告诉您您的星座运势。那么,让我们开始吧!

如何获取您的机器人令牌

要设置新机器人,您需要与 BotFather 交谈。不,他不是一个人——他也是一个机器人,而且他是所有 Telegram 机器人的老大。

  1. 在 Telegram 中搜索@botfather。
Screenshot-2022-12-16-092357
BotFather 电报机器人

2. 单击“开始”按钮开始与 BotFather 对话。

Screenshot-2022-12-16-092531
单击开始按钮
/纽博特
Screenshot-2022-12-16-093337
获取访问令牌

笔记: 确保安全地存储令牌。任何拥有您令牌访问权限的人都可以轻松操纵您的机器人。

如何设置您的编码环境

让我们设置编码环境。虽然有各种库可用于创建 Telegram 机器人,但我们将使用 pyTelegramBotAPI 库。它是 Telegram Bot API 的简单但可扩展的 Python 实现,具有同步和异步功能。

使用 pip 安装 pyTelegramBotAPI 库:

pip 安装 pyTelegramBotAPI
.env
导出 BOT_TOKEN=your-bot-token-here
源.env.env

如何创建您的第一个机器人

TeleBotsend_message()send_document()
机器人.py
导入 os 导入 telebot BOT_TOKEN = os.environ.get('BOT_TOKEN') bot = telebot.TeleBot(BOT_TOKEN)
操作系统
BOT_TOKENBOT_TOKENBOT_TOKENTeleBotBOT_TOKEN

然后我们需要注册消息处理程序。这些消息处理程序包含消息必须通过的过滤器。如果消息通过过滤器,则调用修饰函数并将传入消息作为参数提供。

/开始/你好
@bot.message_handler(commands=['start', 'hello']) def send_welcome(message): bot.reply_to(message, "你好,你好吗?")

对于由消息处理程序修饰的函数来说,任何名称都是可接受的,但它只能有一个参数(消息)。

让我们添加另一个处理程序,将所有传入的文本消息回显给发件人。

@bot.message_handler(func=lambda msg: True) def echo_all(message): bot.reply_to(message, message.text)
lambda真lambda
/开始/你好
bot.infinity_polling()

就是这样!我们已经准备好了 Telegram 机器人。让我们运行 Python 文件并转到 Telegram 来测试机器人。

/你好/开始
Screenshot-2022-12-16-101334
测试机器人

注意:所有消息处理程序都按照它们在源文件中声明的顺序进行测试。

有关使用 pyTelegramBotAPI 库的更多信息,您可以参考他们的 .

如何编写星座机器人代码

现在让我们将注意力转移到构建我们的星座机器人上。我们将在机器人中使用消息链。机器人会首先询问你的星座,然后是日期,然后它会回复该特定日期的星座运势。

在底层,机器人与 API 交互以获取星座数据。

我们将使用我在另一个教程中构建的 Horscope API。如果您想学习如何构建一个,可以阅读本教程。请确保在开始之前探索此处的 API。

如何获取星座数据

让我们创建一个实用函数来获取特定日期的星座数据。

import requests def get_daily_horscope(sign: str, day: str) -> dict: """获取十二生肖的每日星座运势。关键字参数:sign:str - 十二生肖 day:str - 日期格式 (YYYY-MM-DD ) 或今天或明天或昨天返回:dict - JSON 数据 """ url = "https://horscope-app-api.vercel.app/api/v1/get-horscope/daily" params = {"sign":符号,“天”:天}响应= requests.get(url,params)返回response.json()
签名日签名日

如果您测试该函数,您将得到类似于以下内容的输出:

{ "data":{ "date": "2022 年 12 月 15 日", "horscope_data": "白天保持低调,尽量不要陷入在清醒时间里占主导地位的无聊废话。日落之后,随意说出你的想法。你可能会注意到今天有一种冷静的语气和限制性的感觉,让你感觉你永远无法摆脱目前的处境。不要陷入这种消极的心态。” },“状态”:200,“成功”:true }
要求

如何添加消息处理程序

现在我们有了一个返回星座数据的函数,让我们在机器人中创建一个消息处理程序来询问用户的星座。

@bot.message_handler(commands=['horoscopy']) def sign_handler(message): text = "你的星座是什么?\n选择一个:*白羊座*、*金牛座*、*双子座*、*巨蟹座、* *狮子座* 、*处女座*、*天秤座*、*天蝎座*、*射手座*、*摩羯座*、*水瓶座*和*双鱼座*。” send_msg = bot.send_message(message.chat.id, text, parse_mode="Markdown") bot.register_next_step_handler(sent_msg, day_handler)
/星座解析模式
register_next_step_handler()sent_msgday_handler
day_handler()
def day_handler(message): sign = message.text text = "您想知道哪一天?\n选择一个:*今天*、*明天*、*昨天*,或格式为 YYYY-MM-DD 的日期。" sent_msg = bot.send_message( message.chat.id, text, parse_mode="Markdown") bot.register_next_step_handler( sent_msg, fetch_horscope, sign.capitalize())
消息.文本
register_next_step_handler()sent_msgfetch_horscopesign
获取星座()
def fetch_horscope(message, sign): day = message.text horscope = get_daily_horscope(sign, day) data = horscope["data"] horscope_message = f'*Horscope:* {data["horscope_data"]}\\n*Sign :* {sign}\\n*Day:* {data["date"]}' bot.send_message(message.chat.id, "这是你的星座运势!") bot.send_message(message.chat.id, horscope_message, parse_mode =“Markdown”)
消息.文本
获取每日星座运势()

机器人演示

运行 Python 文件后,您可以测试此功能。这是演示:

星座机器人演示

建议的后续步骤

到目前为止,只要我们停止 Python 应用程序,机器人就会停止工作。为了使其始终运行,您可以将机器人部署在 Heroku、Render 等平台上。

这是该项目的 GitHub 存储库的链接 - 请随意查看。

您还可以通过探索 Telegram API 向机器人添加更多功能。

谢谢阅读!你可以在 Twitter 上关注我。