Linuxportalen.se är sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.
Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!
Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!
Idag skrev jag en liten ircbot i PHP för att kolla hur bra det gick. Och det gick bra. Den är "jätteduktig"
#!/usr/bin/php
<?PHP
class IRC
{
#integers
private $chan = "";
private $nick = "";
private $user = "lazydrone";
private $server = "";
private $port = "";
private $my_socket;
private $botmasters = array('larsemil','spektre');
private $commandprefix ="@";
public function send($message)
{
echo "Sending $message\n";
fputs($this->my_socket, $message."\r\n",512);
}
public function connect($server,$port,$nick, $chan)
{
$this->server = $server;
$this->port = $port;
$this->nick = $nick;
$this->chan = $chan;
echo "trying to connect to ".$server. ": ".$port." as ".$nick." and joing chan: ".$chan."\n";
$this->my_socket = fsockopen($this->server,$this->port);
if( feof($this->my_socket))
die("Kunde inte connecta till ".$this->server);
else
{
$this->send("NICK ".$this->nick);
$this->send("USER ".$this->user." * 0 :".$this->user);
$this->send("JOIN ".$this->chan);
}
//make a database connection
try {
$this->db = new PDO("sqlite:ircbot.sdb");
echo "connected to database\n";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
public function server_input($input)
{
echo $input;
if(strpos($input,'PING :') !== FALSE)
$this->send('PONG '.substr ($input,6));
else
{
$inputArray = explode(" ",$input);
preg_match("/\:(.*)\!/",array_shift($inputArray),$matches);
$sender = $matches[1];
$msgtype = array_shift($inputArray);
$reciever = array_shift($inputArray);
$msgArray = explode(":", $input);
$message = $msgArray[2];
$message = chop($message);
if($msgtype == "PRIVMSG")
{
#first we check if its a command
if($message[0] == $this->commandprefix)
{
$commandArray = explode(" ",$message);
$command = array_shift($commandArray);
if($command == "@info")
$this->privmsg($this->chan,"Ich bin ein eeeevil robot.");
elseif($command == "@seen")
{
$user = array_shift($commandArray);
foreach ($this->db->query("select * from users;") as $row)
{
if($user == $row['user'])
{
$this->privmsg($this->chan,$user." sågs sist ".$row['seen']." ".$user." sa då: ".$row['said']);
}
}
}
elseif($command == "@myinfo")
{
foreach ($this->db->query("select * from users where user='$sender'") as $row)
{
$op = "inte op";
if($row['op'])
$op = "op";
$this->privmsg($this->chan, $sender.": Du är ".$op." och din sista aktivitet var: ".$row['seen']);
}
}
elseif($command == "@op")
{
$user = array_shift($commandArray);
$valid = 0;
foreach($this->botmasters as $botmaster)
{
if ($sender == $botmaster)
$valid = 1;
}
if($valid)
{
$this->send("MODE ".$this->chan." +o ".$user);
$this->db->exec("UPDATE users SET op=1 where user='".$user."'");
}
}
}//end if its a command
}
elseif($msgtype == "JOIN")
{
$unseen = 1;
foreach ($this->db->query("select * from users where user='".$sender."';") as $row)
{
echo "User joined. Looking if he is op";
$unseen = 0;
if($row['op'])
{
$this->send("MODE ".$this->chan." +o ".$sender);
echo "OP JOINED! Will op him!";
}
}
if($unseen)
{
$this->db->exec("INSERT INTO users (user,op) values('".$sender."',0)");
$this->privmsg($this->chan,$sender.": Dig har jag inte sett förut. Registerar dig i databasen. För att se vad för info som finns sparad om dig skriv: @myinfo");
}
}
$this->db->exec("UPDATE users SET seen='".date("Y-m-j H:i:s")."' , said='".$message."' WHERE user='".$sender."'");
}
}
public function privmsg($reciever, $message)
{
$this->send("PRIVMSG ".$reciever." :".$message);
}
public function loop()
{
while(1)
{
$return = fgets($this->my_socket,4096);
$this->server_input($return);
}
}
}
$irc = new IRC();
$irc->connect("irc.freenode.net","6667","lazydrone","#lazychan");
//start the ircloop
$irc->loop();
?>