Описание бота
Я использую 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();
Как репликация
- Создание бота Telegram с использованием @ BothFather
- Замена токена, полученного из
BothFather
в process.env.BOT_TOKEN
- Создайте бота, вставив указанный выше код
- Создайте группу и присоединитесь к ней с другой учетной записью
- В консоли появится
new_chat_members
- Теперь оставьте Группа, как вы можете видеть, событие
left_chat_member
не появится.
Странная вещь в том, что: если я удалю ctx.deleteMessage (), так что все коды в isUnwanted
, событие Появляется left_chat_member
.
Я отбросил дни на эту проблему и не могу ее преодолеть. Я открыл тикет на Telegraf JS, но пока ничего.
Мне нужно сохранить в своей базе данных пользователя, который присоединяется к моей группе, и удалить его, когда пользователь уходит.
В своем коде я использовал бота в двух группах, я не знаю, может ли это вызвать проблемы, но я так не думаю.
Может кто-нибудь объяснить мне, что происходит?