Telegram bot 嵌套上一个按钮,node.js
Telegram bot Nested previous button,node.js
如何从第3级节点返回到第2级节点后返回到第1级节点?我的问题是 Back
名字,因为那是一样的,
这是我的代码:
bot.onText(/\/start/, function onLoveText(msg) {
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: StartKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
bot.onText(/\Back/, function onLoveText(msg) {
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: StartKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
bot.onText(/\Back/, function onLoveText(msg) { // I Can't Use Backkk
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: BackKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
您可能应该做的是保存状态,用户当前正在使用他的唯一 ID。
我没有将 nodejs 用于电报机器人的经验,因此以下代码有点伪。
userStateMap = {};
switch ($chat.text)
{
case "/start":
sendWelcomeMessage($chat);
userStateMap[$chat.id] = 0; // save the state
break;
case "1":
$chat.text = "you clicked 1";
$chat.reply_markup = getCustomKeyboard();
return sendMessage($chat);
userStateMap[$chat.id] = 1; // save the state
break;
case "about":
$chat.text = "you clicked about";
$chat.reply_markup = getCustomKeyboard();
return sendMessage($chat);
userStateMap[$chat.id] = 4; // save the state
break;
case "2":
$chat.text = "you clicked 2";
$chat.reply_markup = getCustomKeyboard2();
return sendMessage($chat);
userStateMap[$chat.id] = 2; // save the state
break;
case "previous":
$chat.text = "you clicked previous";
$chat.reply_markup = getCustomKeyboard(userStateMap[$chat.id]); // use the saved state
return sendMessage($chat);
break;
case "3":
$chat.text = "you clicked 3";
$chat.reply_markup = getCustomKeyboard3();
return sendMessage($chat);
userStateMap[$chat.id] = 3; // save the state
break;
}
//customize getCustomKeyboard to receive the state and use it to calculate the next keyboard
因此您将在每次请求后更新状态,对于像 previous
这样的请求,您将根据上次保存的状态计算所需的键盘。
用 callback_query
和 Inline Keyboards
解决了
const helpKeyboard = [[{
text: `back`,
callback_data: `back3`
}]]
bot.on('callback_query', msg => {
if (msg.data == `back3`) {
}
}
如何从第3级节点返回到第2级节点后返回到第1级节点?我的问题是 Back
名字,因为那是一样的,
这是我的代码:
bot.onText(/\/start/, function onLoveText(msg) {
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: StartKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
bot.onText(/\Back/, function onLoveText(msg) {
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: StartKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
bot.onText(/\Back/, function onLoveText(msg) { // I Can't Use Backkk
const opts = {
reply_to_message_id: msg.message_id,
reply_markup: JSON.stringify({
keyboard: BackKeyboard,
resize_keyboard:true,
one_time_keyboard: true
})
};
bot.sendMessage(msg.chat.id, 'Hello', opts);
});
您可能应该做的是保存状态,用户当前正在使用他的唯一 ID。
我没有将 nodejs 用于电报机器人的经验,因此以下代码有点伪。
userStateMap = {};
switch ($chat.text)
{
case "/start":
sendWelcomeMessage($chat);
userStateMap[$chat.id] = 0; // save the state
break;
case "1":
$chat.text = "you clicked 1";
$chat.reply_markup = getCustomKeyboard();
return sendMessage($chat);
userStateMap[$chat.id] = 1; // save the state
break;
case "about":
$chat.text = "you clicked about";
$chat.reply_markup = getCustomKeyboard();
return sendMessage($chat);
userStateMap[$chat.id] = 4; // save the state
break;
case "2":
$chat.text = "you clicked 2";
$chat.reply_markup = getCustomKeyboard2();
return sendMessage($chat);
userStateMap[$chat.id] = 2; // save the state
break;
case "previous":
$chat.text = "you clicked previous";
$chat.reply_markup = getCustomKeyboard(userStateMap[$chat.id]); // use the saved state
return sendMessage($chat);
break;
case "3":
$chat.text = "you clicked 3";
$chat.reply_markup = getCustomKeyboard3();
return sendMessage($chat);
userStateMap[$chat.id] = 3; // save the state
break;
}
//customize getCustomKeyboard to receive the state and use it to calculate the next keyboard
因此您将在每次请求后更新状态,对于像 previous
这样的请求,您将根据上次保存的状态计算所需的键盘。
用 callback_query
和 Inline Keyboards
const helpKeyboard = [[{
text: `back`,
callback_data: `back3`
}]]
bot.on('callback_query', msg => {
if (msg.data == `back3`) {
}
}