left_chat_member не вызывается - PullRequest
4 голосов
/ 05 апреля 2020

Описание бота

Я использую Telegraf JS для разработки 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;

, как использовать 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();

Как репликация

  1. Создание бота Telegram с использованием @ BothFather
  2. Замена токена, полученного из BothFather в process.env.BOT_TOKEN
  3. Создайте бота, вставив указанный выше код
  4. Создайте группу и присоединитесь к ней с другой учетной записью
  5. В консоли появится new_chat_members
  6. Теперь оставьте Группа, как вы можете видеть, событие left_chat_member не появится.

Странная вещь в том, что: если я удалю ctx.deleteMessage (), так что все коды в isUnwanted, событие Появляется left_chat_member.

Я отбросил дни на эту проблему и не могу ее преодолеть. Я открыл тикет на Telegraf JS, но пока ничего.

Мне нужно сохранить в своей базе данных пользователя, который присоединяется к моей группе, и удалить его, когда пользователь уходит.

В своем коде я использовал бота в двух группах, я не знаю, может ли это вызвать проблемы, но я так не думаю.

Может кто-нибудь объяснить мне, что происходит?

1 Ответ

0 голосов
/ 13 апреля 2020

Боты с включенным режимом конфиденциальности не получают обновления служебных сообщений (, а также другие типы обновлений ). Telegram также не отправляет события отпуска, если в группе более 50 участников.

...