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

How to hide Telegram BOT commands when it is part of a group?

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

1) 我可以从 BOT 向群组发送消息,而群组中没有 BOT 吗? 2) 我可以有一种只发送消息的 "no methods" BOT 吗? 3) 我可以禁用客户端的 "slash" 图标,这样我就不会在组中有 "bot method war" 了吗?

谢谢

  1. 不,您不能让机器人在不属于该组的情况下向该组发送消息。
  2. BotFather可以直接不设置命令,这样客户端就没有命令可以显示了。
  3. 如果当前聊天中有机器人,它总是在那里,但这是在 BotFather 中没有设置命令的情况下它的作用:

我有一个更好的解决方案:可以直接通过代码自定义命令,depending from the context(即私人聊天、群组等...)

此示例是使用 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!')
})