es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mi bot de Telegram envía mensajes una y otra vez mientras comienzo a enviar mensajes a los miembros.

Mi bot de Telegram envía mensajes una y otra vez cuando comienzo a enviar mensajes a los miembros, si la cantidad de miembros es superior a 500.

Estoy utilizando este código para enviar mensajes:

<?php
define('API_KEY',"[*API_TOKEN*]");
function bot($method,$datas=[]){
    $url = "https://api.telegram.org/bot".API_KEY."/".$method;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$datas);
    $res = curl_exec($ch);
    if(curl_error($ch)){
        var_dump(curl_error($ch));
    }else{
        return json_decode($res);
    }
}
}

$member = file_get_contents("members.json");
$js = json_decode($member);
if(is_object($js)){
    $js = get_object_vars($js);
}
foreach($js as $mem){
    bot('sendMessage',[
        'chat_id'=>$mem,
        'text'=>"Texto del mensaje a enviar"
    ]);
}
?>

¿Cómo puedo solucionar este error?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código parece ser el uso de file_get_contents() para recuperar la lista de miembros del archivo members.json. Esto puede hacer que la lista se recupere y procese varias veces, lo que lleva a que el bot envíe mensajes duplicados.

    Para solucionar este problema, puedes probar el siguiente enfoque:

    1. En lugar de usar file_get_contents(), utiliza file() para recuperar la lista de miembros como un array.
    $members = file('members.txt', FILE_IGNORE_NEW_LINES);
    
    1. Mezcla el array para asegurarte de que el bot no envíe mensajes en el mismo orden cada vez.
    shuffle($members);
    
    1. Limita el número de mensajes enviados por ejecución a un número manejable, por ejemplo 50.
    $members_chunk = array_chunk($members, 50);
    foreach ($members_chunk as $chunk) {
        foreach ($chunk as $member) {
            // enviar mensaje
        }
        sleep(1);  // añade un retraso para evitar alcanzar el límite de velocidad de Telegram
    }
    

    Esto garantizará que el bot envíe mensajes a todos los miembros sin duplicaciones y en un orden aleatorio. Además, limita el número de mensajes enviados por ejecución para evitar sobrecargar el servidor y alcanzar el límite de velocidad de Telegram.

Comments are closed.