这是我的剧本:
$ircServer = "";
$ircPort = "6667";
$ircChannel = "#";
set_time_limit(0);
$ircSocket = fsockopen($ircServer, $ircPort, $eN, $eS);
if ($ircSocket) {
fwrite($ircSocket, "USER Lost rawr.test lol :code\n");
fwrite($ircSocket, "NICK Rawr" . rand() . "\n");
fwrite($ircSocket, "JOIN " . $ircChannel . "\n");
while(1) {
while($data = fgets($ircSocket, 128)) {
echo nl2br($data);
flush();
// Separate all data
$exData = explode(' ', $data);
// Send PONG back to the server
if($exData[0] == "PING") {
fwrite($ircSocket, "PONG ".$exData[1]."\n");
}
}
}
} else {
echo $eS . ": " . $eN;
}
我遇到问题是添加一个功能,该功能将私人消息在IRC频道上的每个人。我尝试了$ read和其他方法,它不起作用,IRC挂起。
注意:这是出于教育/私人目的,不会造成伤害。
答案 0 :(得分:4)
几年前我在Perl写过几个IRC机器人,说实话,我再也记不住了。无论如何,要向所有用户发送私人消息,首先需要获得频道中的所有用户。
无论如何,发送私信的命令是:
PRIVMSG #channel :Sup?
是的,它会回应“Sup?”在#channel。对于用户来说也是如此:
PRIVMSG John :Sup?
您需要做的就是获取所有用户。要做到这一点:
NAMES #channel
代码取决于您。祝你好运。
编辑:要获得一定比例的用户,只需将其加载到数组中,然后使用shuffle()
shuffle($array);
,如果您想要随机化他们的位置。然后使用count()
$size = count($array);
作为数组大小,将大小乘以百分比。 $target = $size * 0.10;
为10%。然后使用round()
获取舍入的数字。
现在,循环用户数组并将限制设置为$target
。你有它。
编辑:这是一个示例代码(代码的其余部分取决于您:
...
$msg = $_POST['message'];
$pr = $_POST['percentage'];
$pr /= $100; // if the input is already 0.10 or something, no need to do this.
...
shuffle($users);
$size = count($users);
$target = $size * $pr;
$target = $round($target);
for ($i = 0; $i <= $target; $i++) {
fwrite($ircSocket, "PRIVMSG " . $users[$i] . " :" . $msg . "\n")
}
...