当 Telegram BOT 是群组的一部分时,如何隐藏 Telegram BOT 命令?

问题描述 投票:0回答:3

我正在尝试使用 Telegram BOT 向群组发送消息。首先,我认为知道群聊 ID 就足以完成此任务,但事实并非如此。 BOT 必须是该组的一部分。好吧,这有点道理,但问题是:当您将 BOT 添加到一个组(在本例中是一个大组)时,每个人都开始在其设备上看到一个新图标,即“斜杠”图标。他们做什么?他们单击它,查看命令列表,选择其中一个,突然每个人都从组中收到一条新消息:“/something”。想象一下有几十人这样做吗?这很烦人。所以,这些中的任何一个都适合我:

1) 我可以在群组中没有 BOT 的情况下从 BOT 向群组发送消息吗? 2)我可以有一种“无方法”BOT,只发送消息吗? 3)我可以禁用客户端的“斜杠”图标,这样我就不会在组中发生“机器人方法战争”吗?

谢谢你

telegram telegram-bot
3个回答
7
投票
  1. 不可以,您不能让机器人在不属于该组的情况下向该组发送消息。
  2. 您可以简单地不使用 BotFather 设置命令,然后客户端将没有命令可显示。
  3. 如果机器人在当前聊天中,它总是存在,但以下是在 BotFather 中未设置命令的情况下它的作用:


2
投票

我得到了一个更好的解决方案:可以直接通过代码自定义命令,也取决于上下文(即私人聊天、群组等...)

这个示例是使用

Telegraf
完成的,但这与基本代码没有太大不同

bot.start(function(ctx) {
    // If bot is used outside a group
    ctx.telegram.setMyCommands(
        [
            {
                "command": "mycommand",
                "description": "Do something in private messages"
            }, {
                "command": "help",
                "description": "Help me! :)"
            }
        ],
        {scope: {type: 'default'}}
    )

    // If bot is used inside a group
    ctx.telegram.setMyCommands(
        [
            // <-- empty commands list
        ],
        {scope: {type: 'all_group_chats'}}
    )

    ctx.reply('Hello! I\'m your super-cool bot!!!')
})

奖励点,您还可以通过检查源来管理命令行为。 因此,例如,如果组中的用户仍然尝试手动使用您的命令,而您不想执行任何操作:

bot.help(function(ctx) {
    // Check if /help command is not triggered by a private chat (like a group or a supergroup) and do nothing in that case
    if (ctx.update.message.chat.type !== 'private') {
        return false
    }

    ctx.reply('Hi! This is a help message and glad you are not writing from a group!')
})

0
投票

您可以设置

scope
,其中命令可用。将其设置为
all_private_chats
,命令将仅在私人聊天中可见。

https://core.telegram.org/bots/api#setmycommands

https://core.telegram.org/bots/api#botcommandscope

© www.soinside.com 2019 - 2024. All rights reserved.