left_chat_member 未调用

sfa*_*oso 5 node.js telegram telegram-bot

机器人描述

我正在使用TelegrafJS开发Telegram机器人。我创建了自己的中间件,它应该处理发送到组的所有更新消息,特别是,如果更新是服务消息,则机器人必须将其删除。

问题

问题在于机器人仅捕获new_chat_members用户离开聊天时的事件,而left_chat_member不会调用该事件。

中间件代码

class MessageHandler {
    /**
     * Check if is a message service
     */
    _checkServiceMessage(ctx) {
        let unwantedMessages = ['new_chat_members', 'left_chat_member', 'new_chat_title'];
        let isUnwanted = unwantedMessages.some(x => ctx.updateSubTypes.includes(x));

        if (isUnwanted) {

            console.log(ctx.updateSubTypes);

            // Delete service message
            ctx.deleteMessage().then(function (result) {

                // add or remove user to my own db

            }).catch(function (e) {
                console.log(e);
            });
        }
    }

    middleware() {
        return (ctx, next) => {

            this._checkServiceMessage(ctx);

            return next();
        }
    }
}

module.exports = MessageHandler;
Run Code Online (Sandbox Code Playgroud)

这是如何使用Middleware

const Telegraf = require('telegraf');
const MessageHandler = require('../middlewares/handler');
const bot = new Telegraf(process.env.BOT_TOKEN);
bot.use(new MessageHandler().middleware());
bot.startPolling();
Run Code Online (Sandbox Code Playgroud)

如何复制

  1. 使用@BothFather创建 Telegram 机器人
  2. BothFather替换从in获取的 tokenprocess.env.BOT_TOKEN
  3. 创建机器人并粘贴上面的代码
  4. 创建一个群组并使用另一个帐户加入该群组
  5. 在控制台会出现new_chat_members
  6. 现在已经退群了,可以看到该事件left_chat_member不会出现。

奇怪的是:如果我删除 ctx.deleteMessage(),那么 中的所有代码都会出现isUnwanted该事件left_chat_member

我在这个问题上花了好几天的时间,但我无法克服它。我在 TelegrafJS 上开了一张票,但到目前为止还没有任何进展。

我需要将加入我的组的用户存储在我自己的数据库中,并在用户离开时删除。

在我的代码中,我将机器人分为两组,我不知道这是否会导致问题,但我不这么认为。

有人可以向我解释一下发生了什么事吗?

You*_*ace 1

启用隐私模式的机器人不会获取服务消息更新(以及其他类型的更新)。如果群组成员数量超过 50 人,Telegram 也不会发送休假事件。