🤖 十分钟用 Python 和 OpenAI 创建 Telegram 机器人! 🚀

在这个有趣的教程中,我们将向您展示如何创建一个具有的 Telegram 机器人,该机器人能够与用户聊天并生成幽默回复。我们将详细解释每一步,让您轻松入门!

步骤 1:创建 Telegram 机器人 🤖

首先,让我们来创建您自己的 Telegram 机器人。这是如何做的:

  1. 打开 Telegram 应用并搜索 “BotFather”。
  2. 在 BotFather 聊天中,使用 /newbot 命令创建一个新机器人。您需要为机器人取个名字,比如 “PunshineBot”。
  3. BotFather 会为您生成一个独一无二的 API 令牌(Token)。一定要妥善保存这个令牌,稍后我们会在代码中用到它。

步骤 2:导入必要的库 📚

我们首先需要导入一些 Python 库,以便创建 Telegram 机器人并与 OpenAI 进行自然语言处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
import os
from typing import Final, Deque, Dict, Union
from collections import deque

import openai
from telegram import Update
from telegram.ext import (
Application,
CommandHandler,
ContextTypes,
MessageHandler,
filters,
)

请确保您已经安装了 Telegram Bot API 和 OpenAI Python 库。

步骤 3:设置 API 密钥和 Telegram 令牌 🔑

在这一步,我们需要设置 OpenAI API 密钥和 Telegram 机器人令牌。确保您已经注册了 OpenAI 并获取了 API 密钥。然后,将下面的示例代码中的 API 密钥和 Telegram 令牌替换为您自己的:

1
2
openai.api_key = "您的 OpenAI API 密钥"
TOKEN: Final = "您的 Telegram 机器人令牌"

步骤 4:创建启动和帮助命令 🚀

接下来,我们将创建两个命令处理函数,用于处理启动和帮助命令。这些命令允许用户与机器人进行互动。

1
2
3
4
5
async def start_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("你好世界! 😄")

async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("我是 PunShine Bot,我可以帮你找到最搞笑的双关语! 😂")

start_command 函数用于处理启动命令,当用户发送 /start 命令时,机器人将回复 “你好世界! 😄”。help_command 函数用于处理帮助命令,当用户发送 /help 命令时,机器人将回复帮助信息。

步骤 5:处理用户消息 📨

在这一步,我们定义了处理用户消息的 handle_response 函数,并创建了消息处理程序 message_handler。这个函数将用户的消息添加到对话历史记录中,并使用 OpenAI API 生成机器人的回复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
def handle_response(chat_id: Union[int, str], text: str) -> str:
# 获取聊天历史记录
chat_history = get_chat_history(chat_id)

# 创建用户消息
user_message = {"role": "user", "content": text}

# 将用户消息添加到聊天历史记录
chat_history.append(user_message)

# 构建消息列表,包括系统消息和用户消息
messages = [
{
"role": "system",
"content": "你是 PunshineBot,用中文回答,语气随意,别太正式,多用 emoji,回复要简短一点。 😄🚀",
}
]
messages.extend(chat_history)

# 使用 OpenAI API 生成机器人的回复
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
temperature=1,
max_tokens=256,
top_p=1,
frequency_penalty=0,
presence_penalty=0,
)

bot_response = response["choices"][0]["message"]["content"]

# 将机器人的回复添加到对话历史记录
chat_history.append({"role": "assistant", "content": bot_response})

return bot_response

handle_response 函数将用户消息添加到对话历史记录中,然后使用 OpenAI API 生成机器人的回复,并将机器人的回复添加到对话历史记录中,以保持上下文。

message_handler 函数用于处理用户发送的消息。它检查消息的类型(群组消息或私聊消息)以及消息的内容,然后调用 handle_response 函数生成机器人的回复。

步骤 6:运行 Telegram 机器人 🚀

最后,在主函数中,我们创建了一个 Telegram 机器人应用程序,并添加了命令处理程序和消息处理程序。然后,我们启动了 Telegram 机器人,使其可以接收和处理消息。

1
2
3
4
5
6
7
8
9
10
11
12
13
if __name__ == "__main__":
app = Application.builder().token(TOKEN).build()

# 添加命令处理程序
app.add_handler(CommandHandler("start", start_command))
app.add_handler(CommandHandler("help", help_command))

# 添加消息处理程序
app.add_handler(MessageHandler(filters.TEXT, callback=message_handler))

# 启动 Telegram 机器人
print("机器人已启动! 😎🤖")
app.run_polling(poll_interval=1)

app.run_polling(poll_interval=1) 启动了 Telegram 机器人,以每秒的间隔轮询新消息。这意味着机器人会一直运行,并在接收到消息时触发相应的处理程序。

步骤 7:免费在线托管您的 Telegram 机器人 24/7 🚀

在之前的教程中,我们教您如何创建一个 Telegram 机器人。但是,要使您的机器人一直在线运行,您需要让您的计算机保持开启,这可能不太方便。在这篇博客中,我们将向您展示如何将您的机器人免费托管在云服务器上,以便您的机器人可以全天候在线运行。

PythonAnywhere 是一个允许您免费托管 Python 代码的网站,它具有一定的使用限制,但对于简单的用途来说,非常合适。在这里,我们将展示如何使用 PythonAnywhere 来托管您的 Telegram 机器人。

访问 PythonAnywhere 网站 并创建一个帐户。

7.1:创建一个 Python 脚本

一旦您登录到 PythonAnywhere 的仪表板,您将看到一个名为 “Files” 的选项。点击它,然后创建一个新文件,我们将命名它为 “telegram_bot.py”。在这个文件中,我们将粘贴之前创建的 Telegram 机器人代码。

7.2:安装所需的包

在运行 Telegram 机器人之前,我们需要安装所需的 Python 包。PythonAnywhere 提供了一个命令行界面,您可以在其中执行以下命令:

1
2
pip install python-telegram-bot
pip install openai

这将安装 Telegram 机器人库,使您的代码能够与 Telegram 服务器通信。

7.3:运行机器人

现在,您可以返回到 PythonAnywhere 的仪表板,并在 “Files” 下找到您的 “telegram_bot.py” 文件。然后,点击 “Run” 按钮,您的机器人将开始运行。机器人将一直在线,即使您关闭了计算机也是如此。

结语

现在,您已经掌握了如何创建一个 Python Telegram 机器人,并与 OpenAI 集成,使其能够回应用户的消息并生成回复。通过这个简单的步骤,您可以将您的 Telegram 机器人免费托管在云服务器上,以便它可以全天候在线运行。这样,您就可以与您的机器人互动,而不必担心计算机是否开启。如果您有其他免费托管服务或其他问题,欢迎在评论中分享!祝您的机器人运行愉快!🤖🚀😄

另外,如果您想了解更多关于如何在 Discord 上托管机器人的信息,可以观看此 YouTube 视频:How To Host Your Bot Online 24/7 For FREE With Python (Telegram, Discord, Etc)。视频中有更详细的教程和示例。

如果您有任何问题或需要进一步的帮助,请随时留下评论。祝您编程愉快! 🚀🤖😄

References