gpt4 book ai didi

node.js - 未调用 left_chat_member

转载 作者:行者123 更新时间:2023-12-03 12:15:38 26 4
gpt4 key购买 nike

机器人描述

我正在使用 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;

这是如何使用 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();

如何复制
  • 使用 @BothFather 创建一个 Telegram 机器人
  • 替换从 BothFather 得到的 token 在 process.env.BOT_TOKEN
  • 创建机器人并粘贴上面的代码
  • 创建一个组并使用另一个帐户加入该组
  • 在控制台会出现new_chat_members
  • 现在离开小组,你可以看到事件 left_chat_member不会出现。

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

    我在这个问题上浪费了好几天,我无法克服它。我在 TelegrafJS 上开了一张票,但到目前为止还没有。

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

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

    有人可以解释我这是怎么回事吗?

    最佳答案

    启用隐私模式的机器人不会获得服务消息更新 ( as well as other types of updates )。如果群组的成员超过 50 人,Telegram 也不会发送离开事件。

    关于node.js - 未调用 left_chat_member,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61043940/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com