我正在尝试制作一个电报机器人,我想要聊天邀请链接,成员可以通过该链接加入电报组。我在 NodeJS 中使用节点电报机器人 api,同时使用官方电报机器人 api https://core.telegram.org/bots/api#chatmemberupdated 中指定的“chatMemberUpdated”方法。但我没有收到任何更新,这是代码。
bot.on("chatMemberUpdated", async (update) => {
try {
const chatId = await update.chat.id;
const newMember = await update.message.new_chat_member;
// Check if a new member joined
if (newMember) {
const chatInviteLink = await update.message.chat_invite_link;
if (chatInviteLink) {
console.log(
`New member ${newMember.first_name} joined in chat ${chatId}`
);
console.log(`Chat Invite Link: ${chatInviteLink}`);
} else {
console.log(`Chat Invite Link not available for chat ${chatId}`);
}
}
} catch (error) {
console.log(error)
}
});
我尝试使用“new_chat_members”和“left_chat_member”方法,它们返回有关成员加入和离开的数据,但我想要邀请链接,因为我无法理解要使用哪种方法。任何建议将不胜感激,如果有任何替代方法可以实现上述相同的目标,我也愿意接受这些建议。
我得到答案后,这是我的一个愚蠢的错误,“chatMemberUpdated”是一种方法类型,我们可以通过它来获取会员加入的invite_link。这里使用的方法是“chat_member”,而 {allowed_updates : chat_member} 选项可用于机器人,如 telegram api 官方文档中所述,
The bot must be an administrator in the chat and must explicitly specify "chat_member" in the list of allowed_updates to receive these updates.
使用 telegraf 的示例代码(我认为 node-telegram-bot-api npm 包不支持此方法)如下所示:-
const { Telegraf } = require('telegraf');
const { message } = require('telegraf/filters')
const botToken = 'YOUR_TOKEN_GOTTEN_THROUGH_BOTFATHER';
const bot = new Telegraf(botToken);
bot.on('chat_member', (ctx) => {
console.log(ctx.chatMember.invite_link)
})
// Start the bot
bot.launch({
allowedUpdates : ['chat_member']
}).then(() => {
console.log('Bot is running');
});
invite_link 可以在 chatMember 对象中找到。我用 telegraf 尝试过这一点,但也可以从 node-telegram-bot-api 获得相同的结果。