javascript - 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);
}
});
解决方案
感谢 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});
推荐阅读
- scala - 在只有 1 次可能写入的情况下,由于线程安全,是否可能重新分配给 var 不起作用
- r - 将选择发送到 R 时,VS 代码会破坏命令
- java - 长时间 Selenium 执行后 Chrome 关闭
- python - 在 TensorFlow 功能(功能 API)模型中访问“培训”属性
- audio - 如何使用 godot 创建音乐文件?
- r - 如何确保 ggplot2 中具有离散变量的图之间的轴长度一致?
- firebase - G-Ads API 用于获取 GAds 帐户和分析提供商之间的链接 ID
- python - Plotly 忽略动画中的自动范围
- flutter - 无论窗口大小如何,如何制作具有固定大小的容器?
- javascript - 带有 useState 钩子的 onBlur 在 Jest 中不起作用?