【发布时间】:2020-03-18 10:55:38
【问题描述】:
我用 PHP 编写了一个 Telegram 机器人。
在 sendPoll 方法启动后,它需要等待 10 秒以等待用户回答 - 如果用户没有回答,机器人将使用方法 stopPoll 关闭此投票。 (貌似是 Telegram 的官方@quizbot)
我使用 webhooks - stopPoll 方法需要 message_id 选项来关闭轮询,我不知道如何获取最新的 sendPoll 消息的 message_id 以便将其存储在 MySQL 数据库中.
case '/sendpoll':
$i = '';
switch($i){
case 0:
$stt->sendteleg($data = ['text'=>"Are you ready? \xF0\x9F\x9A\x80"], $chat_id_call, "sendMessage");
sleep(2);
$dataSend = getpollquestions(0,6);
$stt->sendteleg($dataSend, $chat_id_call, "sendPoll");
$hasstate =$dbconn->hasuserstate($user_id_call);
if($hasstate){
$dbconn->updatestate($user_id_call,$message_id_call,'wait','poll');
}else {$dbconn->adduserstate($user_id_call,$message_id_call,'wait','poll');}
$state = $dbconn->getuserstate($user_id_call);
$statebolim = explode("-_-",$state);
sleep(10);
$datalimit = gettimeplus10($statebolim[2]);
if($datalimit){
$dat = [
'message_id' => json_encode($statebolim[0]+2)];
$stt->sendteleg($dat, $chat_id_call, "stopPoll");
}
你可以看到我保存了最后一个callbackbutton 的message_id,它以Poll 开头,并为stopPoll +2(+1 表示“你准备好”消息,+1 表示最后一个@ 987654331@消息)。它可以工作,但如果用户在机器人关闭投票之前发送任何消息,则会出现异常 - message_id 错误且 stopPoll 无法正常工作。
请告诉我怎样才能使这段代码工作?
【问题讨论】: