Hayrulla Melibayev
Hayrulla Melibayev

Reputation: 532

Send message telegram using PHP

I had telegram bot codes written at PHP, it has many commands. All commands work perfectly except for one. Here is this code. It had to send a message to bot users.

if($text == '/send' and isset($reply_to_message) and $chat_id == $config['admin_id']){
$message_id = $reply_to_message->message_id;
$db->query("UPDATE `bot_settings` SET `send_status` = '1', `message_id` = '$message_id' WHERE `id` = '1'");
$telegram->sendMessage($chat_id, [
    'text'=>"Message sending is started!"
]);

}

Here is send function

        $db = new MySQL($config['hostname'], $config['username'], $config['password'], $config['dbname']);
    $telegram = new Runner($config['api_key']);

    $settings = $db->query("SELECT * FROM `bot_settings` WHERE `id`='1'")->fetch_assoc();

    $message_id = $settings['message_id'];
    $status = $settings['send_status'];
    if($status == 0){
        exit;
    }else{
        $offset = $settings['send_offset'];
        $users = $db->query("SELECT * FROM `bot_users` LIMIT 60 OFFSET ".$offset);
        if($users->num_rows > 0){
            $offset += 60;
            $db->query("UPDATE `bot_settings` SET `send_offset` = '$offset' WHERE `id`='1'");
            while($row = $users->fetch_assoc()){
                $telegram->forwardMessage($row['user_id'], $config['admin_id'], $message_id);
                usleep(200000);
            }
        }else{
            $telegram->sendMessage($config['admin_id'], [
                'text'=>"Message sending is finished!"
            ]);
            $db->query("UPDATE `bot_settings` SET `send_offset` = '0', `send_status` = '0' WHERE `id`='1'");
            exit;
        }
    }

And here are tables

    -- Table `bot_settings`

    CREATE TABLE IF NOT EXISTS `bot_settings` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `send_offset` int(10) NOT NULL,
    `reminder_offset` int(10) NOT NULL,
    `send_status` tinyint(1) NOT NULL,
    `reminder_status` tinyint(1) NOT NULL,
    `message_id` int(10) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    -- --------------------------------------------------------
    -- Table `bot_users`

    CREATE TABLE IF NOT EXISTS `bot_users` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_id` int(20) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Problem: When I running this code it says "Message sending is started!" and makes changes at DB, but no one users did not get the message.

What could be the problem and how can I solve it. Thanks in advance for any help

Here is sample bot: @UssdYordamchiBot

Upvotes: 0

Views: 1058

Answers (1)

Hayrulla Melibayev
Hayrulla Melibayev

Reputation: 532

The mistake was a simple. I didn't call send function. Problem was solved with calling send function

if($text == '/send' and isset($reply_to_message) and $chat_id == $config['admin_id']){
$message_id = $reply_to_message->message_id;
$db->query("UPDATE `bot_settings` SET `send_status` = '1', `message_id` = '$message_id' WHERE `id` = '1'");
$telegram->sendMessage($chat_id, [
    'text'=>"Message sending started!"
]);
sendpost(); // This line is added
}

and changed this function like belowed.

        function sendpost() 
    {
        global $config;
        global $db;
        global $telegram;
        $settings = $db->query("SELECT * FROM `bot_settings` WHERE `id`='1'")->fetch_assoc();

        $message_id = $settings['message_id'];
        $status = $settings['send_status'];
        if($status == 0){
            exit;
        }else{
            $offset = $settings['send_offset'];
            $users = $db->query("SELECT * FROM `bot_users` LIMIT 60 OFFSET ".$offset);
            if($users->num_rows > 0){
                $offset += 60;
                $db->query("UPDATE `bot_settings` SET `send_offset` = '$offset' WHERE `id`='1'");
                while($row = $users->fetch_assoc()){
                    $telegram->forwardMessage($row['user_id'], $config['admin_id'], $message_id);
                    usleep(200000);
                }
                $telegram->sendMessage($config['admin_id'], [
                    'text'=>"Message sending finished!"
                ]);
            }else{
                $telegram->sendMessage($config['admin_id'], [
                    'text'=>"Nothing to send!"
                ]);
                $db->query("UPDATE `bot_settings` SET `send_offset` = '0', `send_status` = '0' WHERE `id`='1'");
                exit;
            }
        }
    }

Upvotes: 1

Related Questions