我用 php 编写电报机器人。我保存用户chatid用于发送消息;使用此命令发送消息:
/admin sendall:hellow
并在 php 应用程序中使用此代码:
case '/admin':
if ($chat_id == 'my chatid') {
$array = str_replace('/admin', '', $message);
$array = trim($array);
$array = explode(':', $array);
$Admin = new AdminCommand();
$Admin->getCommand($array[0], $array[1]);
} else {
sendMessage($chat_id, 'block ');
}
break;
管理命令类:
class AdminCommand extends Database {
public function getCommand($command, $action = null) {
switch ($command) {
case 'sendall':
$this->sendall($action);
break;
default:
# code...
break;
}
}
public function sendall($message) {
$sql = $this->con->prepare('SELECT * FROM `users`');
$sql->execute();
$res = $sql->fetchAll();
foreach ($res as $row) {
sendMessage($row['chatid'], $message);
}
exit();
}
}
发送消息功能:
function sendMessage($chatId, $message) {
$url = WEBSITE . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message);
file_get_contents($url);
}
大多数时候它工作正常,但有时在向所有用户发送消息后,只要我删除数据库,就会一次又一次地重复,并且不会停止。 有什么问题吗?
正如我在这个answer和电报网站的Bots FAQ页面中所解释的:
我如何一次向我的机器人的所有订阅者发送消息?
不幸的是,目前我们没有发送批量消息的方法,例如通知。我们将来可能会添加一些类似的内容。
为了避免在发送大量通知时达到极限,请考虑将它们分散到更长的时间间隔,例如8-12 小时。 API 不允许每秒向不同用户发送超过 30 条消息,如果超出这个范围,您将开始收到 429 错误。 您无法通过这种方式向所有用户发送消息。
以及机器人常见问题解答页面中的解决方案:
我的机器人已达到极限,我该如何避免这种情况?
在特定聊天中发送消息时,请避免每秒发送多于一条消息。我们可能允许超过此限制的短突发,但最终您将开始收到 429 错误。
如果您要向多个用户发送批量通知,则 API 不允许每秒发送超过 30 条消息左右。考虑将通知分散在 8-12 小时的较长时间间隔内,以获得最佳效果。
另请注意,您的机器人每分钟无法向同一组发送超过 20 条消息。
函数 sendMessage($chatId, $message) {
$url = WEBSITE . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message);
file_get_contents($url);
}