使用 Python 的 Telebot

2025-06-07

使用 Python 的 Telebot

在本文中,我们将使用 Python 构建一个 Telegram 机器人,它将发送猫咪😺的照片和一些猫咪趣闻。为此,我将使用pytelegrambotapi库。

设置我们的机器人

首先,我们需要一个 Telegram 账户,如果没有,可以轻松创建一个。在 Telegram 中搜索“BotFather”。它看起来如下图所示。

BotFather

然后,我们必须发送“开始”消息,并按照 BotFather 给出的指令进行操作。简而言之,/start> /newbot> 机器人名称 > Bot 用户名(唯一)。之后,BotFather 将提供令牌来访问我们的机器人。AUTH 令牌的格式如下:1111111111:AAA_A_aaaaaaaaaaaaaaaaaaaaa_aaaaaaaaaa。

构建机器人的步骤:

现在我们开始编写代码。首先,我们将使用 venv 创建一个虚拟环境。

💡注意:您也可以使用其他选项。

如果您知道这部分,请随意跳过⏩。

设置虚拟环境:

在终端中,打开您的目录并输入以下命令。



python -m venv venv


Enter fullscreen mode Exit fullscreen mode

要激活您的虚拟环境:



venv\Scripts\activate


Enter fullscreen mode Exit fullscreen mode

终端将会看起来像这样..

(venv)(项目路径)

所需依赖项:

您可以在此处找到完整的代码和要求。



pyTelegramBotAPI==3.7.9
python-dotenv==0.17.1
requests==2.25.1


Enter fullscreen mode Exit fullscreen mode

代码

最后,创建一个 Python 文件来编写脚本。首先,导入所需组件。目前,我们只需导入远程机器人和传入组件,其他组件将根据需要导入。

purrrfect_bot.py



import telebot
import os
from dotenv import load_dotenv


Enter fullscreen mode Exit fullscreen mode

现在我们将令牌存储在一个变量中。为此,请在同一目录中创建一个 .env 文件。并将令牌存储在 AUTH_TOKEN 变量中。

.env



AUTH_TOKEN = 'YOUR_TOKEN' 


Enter fullscreen mode Exit fullscreen mode

现在,我们必须在主文件中加载此令牌。

purrrfect_bot.py



load_dotenv()
token = os.getenv('AUT_TOKEN')


Enter fullscreen mode Exit fullscreen mode

在此之后,我们将创建我们的机器人实例并开始轮询消息。

purrrfect_bot.py



bot = telebot.TeleBot(token) # creating a instance

def main():
    bot.polling() # looking for message

if __name__ == '__main__':
    main() 


Enter fullscreen mode Exit fullscreen mode

为了检查我们的机器人,我们将设置一个消息处理程序,以便每当我们发送/greet(命令)或/start 时,回复应该是“你好,你好吗?”。

purrrfect_bot.py



@bot.message_handler(commands = ['greet','start'])
def greet(message):
    msg = ''' Hello, how are you? '''
    bot.reply_to(message, msg)


Enter fullscreen mode Exit fullscreen mode

在上面的章节中,每当我们向机器人发送命令 greet 或 start 时,greet函数就会运行。

reply_to方法发送回复到/start/greet即消息。

为了检查我们的代码,我们将在终端中运行代码



python <main_file_name.py>


Enter fullscreen mode Exit fullscreen mode

尝试向机器人发送/start/greet,它应该回复“你好,你好吗?”
启动函数

但如果我们不想回复消息,那么我们可以使用send_message方法。

purrrfect_bot.py



@bot.message_handler(commands = ['greet','start'])
def greet(message):
    msg = ''' Hello, how are you? '''
    bot.send_message(message.chat.id, msg)


Enter fullscreen mode Exit fullscreen mode

要使用 send_message,我们需要发送者的 ID。我们可以从消息本身获取此 ID,即message.chat.id

运行后会收到没有回复的消息。

无需回复即可启动功能

现在,如果用户发送了除命令之外的任何内容,机器人将不会回复任何内容。为此,我们可以设置message_handler一个函数,将相同的消息发送回用户。更多信息,请参阅文档



@bot.message_handler(func=lambda m: True)
def repeat(message):
    bot.send_message(message.chat.id, message.text)


Enter fullscreen mode Exit fullscreen mode

重复信息

💡注意:它仅适用于文本/表情符号,而不适用于贴纸或任何其他类型的媒体。

API

因此,我们的主要目标是在用户发送命令时发送猫咪图片和相关信息。为了获取猫咪图片和相关信息,我们将使用两个公共 API。



{
    "id": 35,
    "url": "https://i.thatcopy.pw/cat/UJzx759.jpg",
    "webpurl": "https://i.thatcopy.pw/cat-webp/UJzx759.webp",
    "x": 47.55,
    "y": 60.05
}


Enter fullscreen mode Exit fullscreen mode


{
    "status": {
        "verified": true,
        "sentCount": 1
    },
    "type": "cat",
    "deleted": false,
    "_id": "591f9890d369931519ce353d",
    "__v": 0,
    "text": "The domestic cat is the only species able to hold its tail vertically while walking. You can also learn about your cat's present state of mind by observing the posture of his tail.",
    "source": "api",
    "updatedAt": "2020-08-23T20:20:01.611Z",
    "createdAt": "2018-01-04T01:10:54.673Z",
    "used": false,
    "user": "5a9ac18c7478810ea6c06381"
}


Enter fullscreen mode Exit fullscreen mode

两个输出均为 JSON 格式。在第一个 API 中,我们将使用url发送图片或webpurl猫咪贴纸😸。在第二个 API 中,我们将使用它text发送事实。

为了向 API 发出 GET 请求,我们将使用请求模块。

purrrfect_bot.py



import telebot
import os
from dotenv import load_dotenv
import request


Enter fullscreen mode Exit fullscreen mode

我们将编写函数来获取图像 URL 和事实。

purrrfect_bot.py



def get_url():
    contents = requests.get('https://thatcopy.pw/catapi/rest/').json()
    image_url = contents['url']
    return image_url

def get_fact():
    contents = requests.get('https://cat-fact.herokuapp.com/facts/random?animal_type=cat&amount=1').json()
    fact = contents['text']
    if len(fact) < 10:
        return get_fact()
    return fact


Enter fullscreen mode Exit fullscreen mode

请注意,get 方法用于发出 GET 请求。由于我们的响应是 JSON 格式,request.json() 会在字典中进行转换。因此,我们可以将其作为键值对(即content['url']和)进行访问contents['text']

If 语句用于不发送长度小于 10 的事实。

现在我们必须设置机器人将发送图像或事实的命令。

purrrfect_bot.py



@bot.message_handler(commands = ['meow'])
def meow(message):
    url = get_url()
    bot.send_photo(message.chat.id, url)

@bot.message_handler(commands = ['fact'])
def fact(message):
    fact = get_fact()
    bot.send_message(message.chat.id, fact)


Enter fullscreen mode Exit fullscreen mode

在我的例子中,/meow会发送图片,/fact会发送事实。在get_url函数修改中,将url改为webpurl,并在 meow 函数中使用 send_sticker 而不是send_phototosend_sticker来代替图片。

💡注意:请确保这些消息处理程序位于重复上方。否则,机器人将发送命令作为回复。

为了获得有关必须使用哪些命令的更多帮助,我们还可以编辑/start消息。

purrrfect_bot.py



@bot.message_handler(commands = ['greet','start'])
def greet(message):
    msg = ''' Hello, how are you? 
Send /meow to get a cat image.
Send /fact to get random Cat Fact.'''
    bot.send_message(message.chat.id, msg)


Enter fullscreen mode Exit fullscreen mode

喵喵和事实函数

现在,如果我们想要的只是喵喵或事实的图像或事实,而不包含“/”(文本)。

我们可以将正则表达式添加到同一个函数中。我们可以在同一个函数上堆叠两个装饰器。编辑后,代码将如下所示

purrrfect_bot.py



@bot.message_handler(commands = ['meow'])
@bot.message_handler(regexp=r'meow')
def meow(message):
    url = get_url()
    bot.send_photo(message.chat.id, url)

@bot.message_handler(commands = ['fact'])
@bot.message_handler(regexp=r'fact')
def fact(message):
    fact = get_fact()
        bot.send_message(message.chat.id, fact)


Enter fullscreen mode Exit fullscreen mode

meow 和 facts 函数与正则表达式

好了,我们的机器人已经准备就绪,可以用照片的形式向我们发送快乐。您可以根据自己的喜好进行自定义,尽情享受乐趣。欢迎随时提供反馈或提出任何疑问。

存储库链接:https://github.com/PoojaGhodmode/CatBot

参考:

文章来源:https://dev.to/poojaghodmode/telebot-using-python-3akh
PREV
作为 AI 工程师你应该知道的三个提示库
NEXT
Project Loo:我一生中最浪费时间、最精彩、最过度设计的项目