如何使用grammY创建带有反馈的电报轮询



我正在使用Deno和GrammY创建一个简单的机器人,它将通过/q命令向用户发送轮询,然后当用户尝试轮询时,将根据用户的选择回复用户。

bot.ts的代码现在看起来像:

import { Bot } from "https://deno.land/x/grammy@v1.11.2/mod.ts";
const bot = new Bot(MY_REDACTED_BOT_TOKEN);
bot.command("q", async (ctx) => {
ctx.api.sendPoll(
ctx.msg.chat.id,
`What is 1+1?`,
["0", "1", "2", "3"],
{
is_anonymous: false,
type: "quiz",
correct_option_id: 2,
}
);
});
bot.start();

我如何添加等待用户尝试测试的功能,然后在此基础上继续(相当于python-telegram-bot中的PollAnswerHandler(?

您可以监听poll_answer,如下所示。您将在上下文对象ctx中找到所有相关信息,特别是在ctx.pollAnswer下,例如user和选定的option_ids(即选定的答案(,如以下代码示例所示:

const correctAnswerId = 2;
bot.command("q", async (ctx) => {
const message = await ctx.api.sendPoll(
ctx.msg.chat.id,
`What is 1+1?`,
["0", "1", "2", "3"],
{
is_anonymous: false,
type: "quiz",
correct_option_id: correctAnswerId,
}
);
console.log("sent poll #" + message.poll.id + " to user " + ctx.from?.id);
});
bot.on('poll_answer', async (ctx) => {
console.log(ctx.pollAnswer.user.first_name + " answered to poll " + ctx.pollAnswer.poll_id + " with option " + ctx.pollAnswer.option_ids) 
if (ctx.pollAnswer.option_ids.indexOf(correctAnswerId) > -1 )  {
await bot.api.sendMessage(ctx.pollAnswer.user.id, "You're a genius!");
}
else {
await bot.api.sendMessage(ctx.pollAnswer.user.id, "Almost correct!");
}
});

在发送轮询的代码中,我还添加了const message =来保存返回值,其中包含message.poll.id。这可以用来跟踪哪个轮询被发送给了哪个用户,这样您就可以很容易地找到轮询响应所指的轮询。注意:每次发送投票时,投票Id都会更改。

控制台将显示例如:

向用户1234567890发送了轮询#5418284016237281795jps用选项2 回答了5418284016237281795的民意调查

相关内容

  • 没有找到相关文章

最新更新