28 March 2009

เขียน Bot irc ด้วย PHP ตอนที่ 2

คราวนี้เราจะมาเขียนบอทให้มันสามารถอยู่ใน server irc ได้โดยไม่หลุดออกมานะครับ
โดยเราจะทำการตรวจสอบค่าที่ server irc ส่งมา



<?php
$bot = array(
//ส่วนนี้คือ server ของ irc ที่เราจะเข้าใช้บริการ
server => "irc.thaishadow.com",

//port ของ server
port => "6667",

//ชื่อห้อง
channel => "#thdbot",

//ชื่อที่ใช้แสดงใจห้อง
ident => "Zero_Engine",

//username ที่ใช้ใน server irc
username => "Zero_Engine",

//password ที่ใช้ใน server irc
password => "Password-Unknow",

//ip address ของ host ที่เราปล่อยบอท
hostname => $_SERVER['REMOTE_ADDR']
);

//ให้โปรแกรมทำงานโดยไม่มี time out
set_time_limit(0);

//ให้โปรแกรมทำงานถึงแม้เราจะปิด Browser
ignore_user_abort(0);

//ทำการเชื่อมต่อกับ server irc
$socket = fsockopen($bot['server'], $bot['port']);

//ส่งข้อมูลของเราไปให้ server
fputs($socket, "USER ".$bot['ident']." ".$bot['hostname']."
".$bot['username']." :".$bot['username']."\n");

//เปลี่ยนชื่อของเราที่จะใช้แสดง
fputs($socket, "NICK ".$bot['ident']."\n");

//ใส่รหัสผ่าน
fputs($socket, "NickServ IDENTIFY ".$bot['password']."\n");

//เข้าห้องใน irc
fputs($socket, "JOIN ".$bot['channel']."\n");

//ทำการลูปซ้ำไปเรื่อยๆ
while(1){
   //ทำการ loop เซ็คค่าว่ามีข้อมูลหรือไม่
   while($data = fgets($socket,128)){
     //ทำการแยกข้อมุลที่ได้รับออกเป็น array โดยข้อมุลที่ได้รับจะมาในรูป "PING รหัสสือสาร" 
     $get = explode(" ",$data);
     //ตรวจสอบว่าข้อมูลที่ได้รับขึ้นต้นด้วย PING
     if($get[0] == "PING"){
        //ส่งข้อมุลกลับไป server โดยเริ่มต้นด้วย PONG ตามด้วยรหัสที่ได้รับจาก PING
        fputs($socket,"PONG ".$get[1]."\n");
     }
   }
}
?>




DOWNLOAD


//ให้โปรแกรมทำงานโดยไม่มี time out
set_time_limit(0);

//ให้โปรแกรมทำงานถึงแม้เราจะปิด Browser
ignore_user_abort(0);


สองบรรทัดนี้จะทำหน้าที่ที่เซฟเวอร์ที่เราปล่อยบอทไม่ให้โปรแกรมหยุดทำงาน
ส่วนใน while นั้นจะทำการตรวจสอบว่า server irc มีการส่งข้อมูลมาหรือไม่ถ้าได้รับข้อมูล
ก็จะมีการส่งกลับ ทำให้ bot ไม่หลุดออกจาก server irc *O*