Я программирую телеграмма-бота с встроенными кнопками.
Для печати встроенных кнопок сначала нужно настроить «клавиатуру».
«Клавиатура» состоит из кнопок, которые появляются при ее печати.
Пример встроенной клавиатуры:
$tastieraStart='[{"text":"Menu","callback_data":"StampaMenu"},{"text":"Carrello","callback_data":"VisualizzaCarrello"}],[{"text":"Prezzario","callback_data":"Prezzario"}]';
эта клавиатура отображает 2 кнопки (Меню и Carrello) в первом ряду
и 1 во втором ряду (prezzario)
В моем случае мне нужно создать клавиатуру, динамически берущую данные из моей базы данных
/*THIS IS HOW I USUALLY PRINT A BOT INLINE KEYBOARD*/
$tastieraStart='[{"text":"Menu\n'.$menu.'","callback_data":"StampaMenu"},{"text":"Carrello\n'.$carrello.'","callback_data":"VisualizzaCarrello"}],[{"text":"Prezzario\n'.$prezzario.'","callback_data":"Prezzario"}]';
editMessageText($queryUserId,$querymsgid,"Benvenuto ".$name.", da oggi sarò il tuo barista personale! \xF0\x9F\x98\x89 \nCome posso servirti?",$tastieraStart,"inline");
В коде, который вы видите ниже, я выбираю только те элементы, которые мне нужны, и добавляю их на клавиатуру.
Код работает, и если я пытаюсь напечатать клавиатуру, он печатается в правильном формате.
Когда я хочу использовать это как клавиатуру, мой бот просто печатает «1».
Я понятия не имею, откуда взялась эта "1".
if($querydata=="Freddo")
{
$CONT="SELECT COUNT(*) AS totale FROM ListinoProdotti WHERE categoria='freddo'";
$resultCONT=$conn->query($CONT);
$row = $resultCONT->fetch_assoc();
$COUNT=$row['totale'];
editMessageText($queryUserId,$querymsgid,$COUNT);
$QueryFreddo="SELECT * FROM ListinoProdotti WHERE categoria='freddo'";
$resultFreddo=$conn->query($QueryFreddo);
$row = $resultFreddo->fetch_assoc();
$tastieraTemp="'";
for($i=0;$i<$COUNT;$i++)
{
$prezzoTemp=$row['prezzo'];
$prodottoTemp=$row['prodotto'];
$tastieraTemp=$tastieraTemp."[{'text':\"".$prodottoTemp.$prezzoTemp."\",'callback_data':\"POSVER\"}]";
if($i<=$resultCONT)
{
$tastieraTemp=$tastieraTemp."'";
}
else
{
$tastieraTemp=$tastieraTemp.",";
}
}
$tastieraFreddo=$tastieraTemp;
editMessageText($queryUserId,$querymsgid,"Seleziona ciò che desideri ordinare:freddo",$tastieraFreddo,"inline");
exit();
}
Также эта функция используется для редактирования предыдущей клавиатуры.
function editMessageText($chatId,$message_id,$newText,$tastiera,$tipo)
{
if(isset($tastiera))
{
if($tipo=="fisica")
{
$tastierino='&reply_markup={"keyboard":['.$tastiera.'],"resize_keyboard":true}';
}
else
{
$tastierino='&reply_markup={"inline_keyboard":['.$tastiera.'],"resize_keyboard":true}';
}
}
$url = $GLOBALS[website]."/editMessageText?chat_id=".$chatId."&message_id=".$message_id."&text=".urlencode($newText).$tastierino;
file_get_contents($url);
}
Я бы хотел, чтобы бот использовал клавиатуру, которую я создаю [$ tastieraFreddo], в качестве реальной клавиатуры и печатал ее как встроенные кнопки
Спасибо за помощь:)