首页 > 解决方案 > Telegraf:限制权限后,我的机器人不会授予回帖功能

问题描述

我很难理解我在哪里出错了,所以我正在寻找一些额外的眼睛。我正在使用 Telegraf 在 NodeJS 中制作 Telegram 机器人。当新用户登录时,它应该限制他们在回答简单的验证码式问题之前不能发布任何内容。假设他们回答正确,他们应该被授予再次发帖的能力。如果他们回答错误,他们就会被踢出小组。

除了用户在正确回答后被赋予发帖能力的部分之外,一切似乎都融合在一起了。我的理解是对于您想要允许的权限,restrictChatMember 可以通过“true”,但它不起作用。我还缺少什么?

bot.on('new_chat_members', (ctx) => {
  newMember = ctx.message.new_chat_members[0].id;
  newMemberName = ctx.message.new_chat_members[0].first_name;
  bot.telegram.restrictChatMember(ctx.chat.id, newMember);
  const keyboard = Keyboard.make([
    Key.callback('Answer1', 'Fail'),
    Key.callback('Answer2', 'Fail'),
    Key.callback('Answer3', 'Pass'),
    Key.callback('Answer4', 'Fail'),
    Key.callback('Answer5', 'Fail'),
  ]).inline();
    bot.telegram.sendMessage(ctx.chat.id, `Hello, ${newMemberName}!\nYou can post once You select Answer3`, keyboard).then(
        ({ message_id }) => { spamBlocker = message_id; });
});

bot.on("callback_query", function(callbackQuery) {
  let chatID = callbackQuery.update.callback_query.message.chat.id;
  if (callbackQuery.update.callback_query.data == "Pass") {
    bot.telegram.deleteMessage(chatID, spamBlocker);
    bot.telegram.restrictChatMember(chatID, newMember, [true, true, true, true]);
    bot.telegram.sendMessage(chatID, `${newMemberName}, ${welcomeMessage}`)
  } else {
    bot.telegram.kickChatMember(chatID, newMember);
    bot.telegram.deleteMessage(chatID, spamBlocker);
  }
});

标签: javascriptnode.jstelegram-bottelegraf.js

解决方案


感谢 CodingHelp Discord 上一位好心的陌生人的帮助,我能够得出以下解决方案。问题是restrictChatMember 需要一个聊天ID、一个成员ID 和一个对象。该对象采用密钥对(事后看来很明显),因此您告诉它“can_send_messages”:例如,为真,然后继续执行每一行。

就我而言,更改此行:

bot.telegram.restrictChatMember(chatID, newMember, [true, true, true, true]);

对此:

bot.telegram.restrictChatMember(chatID, newMember, {"can_send_messages": true, "can_send_media_messages": true, "can_send_other_messages": true, "can_add_web_page_previews": true});

推荐阅读