我正在创建游戏机器人,用户应该回答一些问题,管理员应该批准或拒绝他们。我需要找到一种方法,当管理员接受答案时,强制改变用户的场景。
例如用户在场景“回答”。当用户发送消息时,它发送给管理员
const gameButtons = [
[
{ text: `✅ approve`, callback_data: `gTo:appG/uId=${ctx.state.userId}` },
{ text: `❌ reject`, callback_data: `gTo:rejG/uId=${ctx.state.userId}` },
],
];
await ctx.telegram.sendMessage(ctx.state.chatTo, `User answer is: ${ctx.message.text}`, {
reply_markup: JSON.stringify({ inline_keyboard: gameButtons }),
});
字符串
所以管理员收到消息,或将接受或拒绝
const approveQuestion = async ({ ctx, text }) => {
const [, user] = text.split("/");
const [, userId] = user.split("=");
//somehow change users scene to answered
await changeUserScene("winner", userId);
await ctx.telegram.sendMessage(userId, "It is right answer");
};
型
有办法做到这一点吗?
2条答案
按热度按时间j0pj023g1#
ctx
)时,你才能改变用户的场景。获取
ctx
的最简单方法是将其保存,以便在与用户进行交互时使用。请看我的测试代码,解释如下:
字符串
这两个重要部分是:
型
这里我们保存每个用户输入
scene_1
时的ctx
。型
然后,当我们收到来自
scene_2
中的用户的消息时,我们检查(这纯粹是为了测试)消息是否来自user_2
,如果是,我们使用user_1
的ctx
并调用scene.enter
来强制他进入新场景。这与预期的一样,如果需要,我可以放置一些2个Telegram帐户与该机器人交谈的截图。
看起来你可以在运行中创建
ctx
,但是如果你有能力的话,我建议你保存它。zdwk9cvp2#
是的,运行以下命令。插入注解以帮助
字符串