<?php // example containing a trivia plugin and a command line non-blocking client that supports input/output require_once('class.phpircclient.php'); // create a plugin class MyPlugin { private $pClient; // parent client // send messages // public function send($message) { $this->pClient->send($message); } // send messages with delay // public function send_delayed($message, $delay) { $this->pClient->send_delayed($message, $delay); } // construct // set parent public function __construct($client) { $this->pClient = $client; } // every plugin must have this function // it processes incoming lines public function process($line) { echo "Plugin: $line\n"; } } // end plugin example class TriviaPlugin { // someone starts a private message with our chatclient and types: !trivia // the chatclient will then start a trivia game with that person // very simple... but you can make it more complex if you want private $pClient; // parent client private $questions = array( "What is the capital of France?", // Question 1 "What is the highest mountain in the world?", // Question 2 // Add more questions here... ); private $answers = array( "Paris", // Answer to Question 1 "Mount Everest", // Answer to Question 2 // Add more answers here... ); private $current_question = 0; private $waiting_for_answer = false; // construct // set parent public function __construct($client) { $this->pClient = $client; } public function get_nick() { return $this->pClient->nick; } // send messages // public function send($message) { $this->pClient->send($message); // sends a raw irc message } // send messages with delay // public function send_delayed($message, $delay) { $this->pClient->send_delayed($message, $delay); // send a raw message with delay } public function msg_user($user, $message) { $str = $this->pClient->str_send_message($user, $message); // make the string to send to a user $this->pClient->send($str); // send the strings } // every plugin must have this function // it processes incoming lines public function process($line) { echo "Plugin: $line\n"; // Check if the incoming message is a private message if (preg_match('/^:([^!]+)!([^@]+)@([^ ]+) PRIVMSG ([^ ]+) :(.+)/', $line, $matches)) { $sender = $matches[1]; $channel = $matches[4]; $message = $matches[5]; print_r($matches); print($sender."==="); print($this->get_nick()); echo "===\r\n"; if ($sender == $this->get_nick()) { return; } // Check if the message is a command to start the trivia game if (strtolower($message) == "!trivia") { // Check if the game is already in progress if ($this->waiting_for_answer) { $this->msg_user($sender, "A game of trivia is already in progress!"); } else { $this->msg_user($sender, "Starting a new game of trivia!"); $this->current_question = 0; $this->waiting_for_answer = true; # send user the question $this->msg_user($sender, "Question 1- " . $this->questions[$this->current_question]); return; } } // Check if the plugin is currently waiting for an answer to a trivia question if ($this->waiting_for_answer) { // Check if the message is the correct answer to the current question if (strtolower($message) == strtolower($this->answers[$this->current_question])) { $this->msg_user($sender, "Correct!"); $this->current_question++; // now if the current question is the last question, reset the game if($this->current_question == count($this->questions)) { $this->current_question = 0; $this->waiting_for_answer = false; $this->msg_user($sender, "Game over!"); return; } // Check if there are more questions if ($this->current_question < count($this->questions)) { $this->msg_user($sender, "Question " . ($this->current_question + 1) . "- " . $this->questions[$this->current_question]); } else { // $this->send("Game over!"); $this->waiting_for_answer = false; } } else { $this->msg_user($sender, "Incorrect! Try again."); // repeat question $this->msg_user($sender, "Question " . ($this->current_question + 1) . "- " . $this->questions[$this->current_question]); } } // end waiting for answer } } } // end trivia bot example $nick = 'yournickhere'; $user = 'yourusernamehere'; $realname = 'a name'; $channel = "#ircclientexample"; $client = new IRCClient('irc.defineya.com', 6667, $channel); #doesn't connect to channel off the hop. // attach plugins // $client->plugins[] = new MyPlugin($client); $client->plugins[] = new TriviaPlugin($client); $client->connect(); // now send login and join channel commands $client->send_delayed($client->str_login($nick, $user, $realname), 2); $client->send_delayed($client->str_join_channel($channel), 3); $client->startLoop(); $client->disconnect(); ?> |