Telegram机器人自定义命令完全教程:从创建到高级玩法一次搞定

本文详细介绍如何在Telegram机器人中创建和使用自定义命令,包括BotFather设置、命令列表、参数处理、权限控制及实战示例,助你轻松打造高效机器人。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

在Telegram生态中,机器人(Bot)是提升效率、实现自动化的重要工具,而自定义命令则是与机器人交互最直接、最常用的方式。通过合理设置自定义命令,你可以让机器人快速响应特定指令,完成查询、管理、通知等任务,大幅减少重复操作。然而,许多用户对如何创建和管理自定义命令并不熟悉,甚至误以为命令只能使用官方预设。本文将带你从头掌握Telegram机器人自定义命令的完整知识,从最基础的BotFather设置到代码中的高级处理,一次全部讲透。

一、什么是Telegram机器人自定义命令?

自定义命令是指以斜杠/开头、由机器人开发者预先定义并注册的指令。例如,常见的/start/help,或者你自己设定的/check/report。当用户在聊天中输入这些命令时,机器人会收到相应的Update消息,并执行对应的逻辑。

自定义命令的核心价值在于:

  • 快速触发:无需输入完整句子,一个斜杠命令即可唤起特定功能。
  • 直观易记:简短、有意义的命令比复杂操作更易被用户接受。
  • 自动获取参数:可在命令后附加参数,让命令更灵活。

二、准备工作:创建机器人和获取Token

在设置自定义命令之前,你需要拥有一个机器人。如果还没有,请按以下步骤操作:

  1. 在Telegram中搜索@BotFather(官方机器人之父)。
  2. 发送/newbot,按提示为机器人起名和设置用户名(必须以bot结尾)。
  3. 创建成功后,BotFather会返回一个HTTP API Token,类似123456:ABC-DEF...。这个令牌是机器人API的通行证,务必妥善保存。

如果你已有机器人,但忘记Token,可以在BotFather中发送/mybots,选择对应机器人后点击API Token查看。

三、使用BotFather设置自定义命令

设置命令的最标准方式是通过BotFather的/setcommands指令。这样做的好处是:用户在与机器人聊天时,输入/即可看到命令列表和说明,非常友好。

实操步骤:

  1. 向BotFather发送/setcommands,然后选择目标机器人。
  2. 输入命令列表,格式为:
command1 - 描述1
command2 - 描述2
...

例如:

start - 开始使用
help - 帮助信息
status - 查看当前状态

注意:

  • 命令必须为小写字母、数字或下划线,不能包含空格。
  • 描述与命令之间用 - 分隔(短横线两侧有空格)。
  • 也可以使用/setcommands后直接发送JSON格式的数组,但普通格式即可满足多数需求。

设置完成后,用户在聊天框中输入/,就会看到你定义的命令及描述。值得注意的是,Telegram官方规定命令本身只能使用拉丁字符,但描述可以使用中文,用户理解起来没有问题。

四、在代码中处理自定义命令

光设置命令列表还不够,真正要执行需要编写代码。以最流行的Python库python-telegram-bot为例,处理命令非常简单。

首先安装库:

pip install python-telegram-bot

示例代码:

from telegram.ext import Application, CommandHandler, ContextTypes
from telegram import Update

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("欢迎使用自定义命令教程机器人!")

async def status(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("系统运行正常。")

def main():
    app = Application.builder().token("YOUR_TOKEN").build()
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("status", status))
    app.run_polling()

if __name__ == "__main__":
    main()

要点说明:

  • Application是机器人应用的核心,通过builder()配置Token。
  • CommandHandler将命令名称与回调函数绑定。
  • 回调函数需要定义为async,并接收updatecontext两个参数。

这样,当用户发送/start/status时,机器人就会自动触发对应函数并回复消息。

五、进阶技巧:命令参数与权限控制

1. 接收命令参数

在很多场景中,命令需要携带参数,比如/subscribe 123。通过context.args可以获取所有参数(以空格分隔的列表)。

async def subscribe(update: Update, context: ContextTypes.DEFAULT_TYPE):
    args = context.args
    if args:
        await update.message.reply_text(f"已订阅参数:")
    else:
        await update.message.reply_text("请提供参数,如:/subscribe 123")

也可以直接解析update.message.text,但建议使用context.args,更省心。

2. 权限控制

有些命令只允许群组管理员使用,或者只允许特定用户。你可以在回调函数中检查用户身份。

from telegram import ChatMember

async def admin_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user = update.effective_user
    chat = update.effective_chat
    member = await chat.get_member(user.id)
    if member.status in (ChatMember.ADMINISTRATOR, ChatMember.OWNER):
        await update.message.reply_text("你有管理员权限,可以执行此命令。")
    else:
        await update.message.reply_text("抱歉,仅管理员可使用此命令。")

这里使用了chat.get_member()获取成员信息,并根据状态判断权限。还可以用更精确的权限检查,比如BotCommandScope来按场合显示命令,但那是更复杂的主题。

六、常见问题与解决方案

Q1:为什么我设置了命令列表,但机器人没反应?

可能原因:代码中没有注册对应的CommandHandler;或Token错误;或机器人未运行。请逐一检查。

Q2:命令支持中文吗?

Telegram API规定命令必须由字母、数字和下划线组成,且不区分大小写(但官方推荐小写)。因此命令本身不支持中文,但命令描述可以写中文,用户看到的菜单说明就是中文。

Q3:如何删除命令?

向BotFather发送/setcommands,选择机器人,然后输入delete(或直接清空列表)即可移除全部命令。也可以只保留要保留的命令,覆盖列表。

Q4:能否在不同的聊天中显示不同的命令?

可以。使用BotFather的/setcommands时,选择机器人后,Telegram会询问作用域,可选默认、群组、频道或私聊。但代码层面需要配置BotCommandScope,属于进阶用法。

总结

自定义命令是Telegram机器人的基础也是核心功能,掌握它可以让你迅速构建出实用、高效的交互工具。本文从BotFather设置命令列表,到Python代码实现处理,再到参数和权限控制,给出了完整的操作路线。希望你能动手实践,根据自己的需求打造属于你的机器人命令。如果遇到问题,欢迎在评论区留言交流。

FAQ

下载与安装

常见问题

Telegram机器人自定义命令如何设置?

通过BotFather的/setcommands指令,输入命令列表,每行格式为:command - 描述。命令只能使用小写字母、数字和下划线,描述可用中文。

为什么我的机器人命令没有反应?

常见原因包括:代码中未注册对应CommandHandler、Token错误、机器人未运行、命令名称不匹配(注意大小写)或命令列表与代码中的不一致。

能否让机器人支持中文命令?

不能。Telegram API规定命令只能由字母、数字和下划线组成,不支持中文。但命令描述可以设置为中文,方便用户理解。