回答分别电报用户

时间:2017-12-25 10:04:57

标签: php chat telegram telegram-bot php-telegram-bot

我正在使用PHP来控制我的Telegram Bot的内容管理系统。基本上我到目前为止所做的是,我可以阅读人们发送给我的Telegram Bot并回复他们的消息。

为了做到这一点,我对此进行了编码:

<?php 
$botToken = '423495534:asdsadsadasdsadsa';
$website = 'https://api.telegram.org/bot'.$botToken;
$update = file_get_contents($website."/getUpdates");
$updateArray = json_decode($update, TRUE);
$info = file_get_contents($website."/getme");
$infoArray = json_decode($info, TRUE);
$num = count($updateArray["result"]);
$sender_ids = array();
$sender_infos = array();
for($i=0;$i<$num;$i++){
    $sender_id    = $updateArray["result"][$i]["message"]["from"]["id"];
    $sender_isbot = $updateArray["result"][$i]["message"]["from"]["is_bot"];
    $sender_fname = $updateArray["result"][$i]["message"]["from"]["first_name"];
    $sender_lname = $updateArray["result"][$i]["message"]["from"]["last_name"];
    $sender_uname = $updateArray["result"][$i]["message"]["from"]["username"];
    $sender_type  = $updateArray["result"][$i]["message"]["chat"]["type"];
    $sender_msg   = $updateArray["result"][$i]["message"]["text"];
    $sender_date  = $updateArray["result"][$i]["message"]["date"];
    if(false === $key = array_search($sender_id, $sender_ids)){
        $sender_ids[] = $sender_id;
        $sender_infos[] = [
            'sender_id' => $sender_id,
            'sender_isbot' => $sender_isbot,
            'sender_fname' => $sender_fname,
            'sender_lname' => $sender_lname,
            'sender_uname' => $sender_uname,
            'sender_type' => $sender_type,
            'sender_msg' => [$sender_msg],
            'sender_date' => [$sender_date]
        ];
    }else{
        $sender_infos[$key]['sender_msg'][] = $sender_msg;
        $sender_infos[$key]['sender_date'][] = $sender_date;
    }
}
$num2 = count($sender_ids); 
for($j=0;$j<$num2;$j++){
    $id = $sender_infos[$j]["sender_id"];
    $first_name = $sender_infos[$j]["sender_fname"];
    $last_name = $sender_infos[$j]["sender_lname"];
    $username = $sender_infos[$j]["sender_uname"];
    $messages = $sender_infos[$j]["sender_msg"];
    $acc_type = $sender_infos[$j]["sender_type"];
    $isbot = $sender_infos[$j]["sender_isbot"];
    $num1 = count($messages);

    echo '                          
    <div class="col-md-3">
        <div class="box box-danger direct-chat direct-chat-danger">
            <div class="box-header with-border">
            <h3 class="box-title">'.$first_name.'</h3>
            <sup>'.$acc_type.' - '.$isbot.'</sup>
            <div class="box-tools pull-right">
                <span data-toggle="tooltip" title="'.$num1.' New Messages" class="badge bg-red">'.$num1.'</span>
                    <button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
                </button>
                <button type="button" class="btn btn-box-tool" data-toggle="tooltip" title="Contacts" data-widget="chat-pane-toggle">
                    <i class="fa fa-comments"></i></button>
                <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
            </div>
        </div>
        <div class="box-body">
            <div class="direct-chat-messages">
                <div class="direct-chat-msg">
                    <div class="direct-chat-info clearfix">
                        <span class="direct-chat-name pull-left">';
                            echo '<strong>'.$first_name.'</strong>';
                            echo '
                        </span>
                    </div>';
                    for($i=0;$i<$num1;$i++){
                        echo '<div class="direct-chat-text">';
                        $text = $sender_infos[$j]["sender_msg"][$i];
                        if($text[0] === '/') {
                            echo '<a href="#" style="color:blue">'.$text.'</a>';
                        }else{
                            echo $text;
                        }
                        echo '<span class="direct-chat-timestamp pull-right">';
                        // echo date('l', $sender_infos[$j]["sender_date"][$i]);
                        echo '</span>';
                        echo '</div>';
                    }
                echo '
                </div>
                <div class="direct-chat-msg right">
                    <div class="direct-chat-info clearfix">
                        <span class="direct-chat-name pull-right">'.$bot_fname.'</span>
                    </div>
                    <img class="direct-chat-img" src="
                    ';
                    if ($dataSet->GetAvatar() != NULL){
                            echo $dataSet->GetAvatar();
                    }else{
                        echo "img/noprofilepic.jpg";
                    }
                    echo '
                    " alt="Message User Image">
                    ';
                    $num3 = count($request_params["text"]);
                    foreach($_SESSION['messages'] as $reply){
                        echo '<div class="direct-chat-text">';
                        echo $reply;
                        echo '</div>';
                    }
                    echo '
                    </div>
                </div>
                <div class="direct-chat-contacts">
                    <ul class="contacts-list">
                        <li>
                            <a href="#">
                                <div class="contacts-list-info">
                                    <span class="contacts-list-name">
                                        ';
                                        echo $first_name = $sender_infos[$j]["sender_fname"];  
                                        echo ' </br> ';
                                        echo $last_name = $sender_infos[$j]["sender_lname"];
                                        echo ' </br> ';
                                        echo ' <a target="_blank" href="http://www.t.me/'.$username.'">'.$username.'</a>';
                                        echo ' </br> ';
                                        echo ' <small class="contacts-list-date pull-right">'.$id.'</small>
                                        </span>
                                    <span class="contacts-list-msg">QUOTE</span>
                                </div>
                            </a>
                        </li>
                    </ul>
                </div>
            </div>';
            if (isset($_POST['send'])){
                $pm = $_POST['message'];
                array_push($_SESSION['messages'], $pm); 
                $request_params = [
                    'chat_id' => $id,
                    'text' => $pm
                ];
                echo "<META HTTP-EQUIV='Refresh' Content='0; URL=telegrambots.php?user_name=".$user_name."'>";
                $request_url = 'https://api.telegram.org/bot' . $botToken . '/sendMessage?' . http_build_query($request_params);
                $response = file_get_contents($request_url);
            }
            echo '
            <div class="box-footer">
                <form action="" method="post">
                    <div class="input-group">
                        <input type="text" name="message" placeholder="Write your direct message" class="form-control">
                        <span class="input-group-btn">
                            <input name="send" type="submit" class="btn btn-danger btn-flat"/>
                        </span>
                    </div>
                </form>
            </div>
        </div>
    </div>
    ';
}
?>

它的基本功能是它抓取我的Bot的最新更新并计算结果的数量并将其保存在$num中。然后使用 for循环我尝试划分有关已发送消息的用户的每个信息。之后,我将所有发送者所需的信息存储在一个名为$sender_infos的独立数组中。接下来的 for循环会显示一个基本的聊天框,具体取决于用户数量。

这一切都是这样的:

print screen

所以它运行良好而且完美但问题是,每当我尝试回答一个对话时,它就会将消息发送给所有可用的用户。此问题来自 for loop ,它将每个用户划分为聊天框。

但是,我想要做的是向CUSTOM用户发送单一直接消息,而不是所有用户。

我希望我已经很好地解释了我的问题,所以你可以理解。如果没有,请评论我以获取更多信息和其他更新。

注意:我不想快速回答这个问题。因为我面对这几天,我不知道如何解决它。请确保您了解我的要求,然后添加您的建议。

提前致谢...

0 个答案:

没有答案