PHP Classes

File: ex_multiplexlistener.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in Bookmark in
  Classes of sk89q  >  BlueTOC  >  ex_multiplexlistener.php  >  Download  
File: ex_multiplexlistener.php
Role: Example script
Content type: text/plain
Description: Example usage of MultiplexListener
Class: BlueTOC
AIM client using TOC instant messaging protocol
Author: By
Last change: v2.3.000
Date: 8 years ago
Size: 5,818 bytes


Class file image Download
 * This bot only tells time when you talk to it.
 * But you can clone it! Just say signon <username> <password> to it via IM
 * Example: signon bob password
 * All cloned bots will also be able to be used to clone even more!
 * This cloning is achievable by __MultiplexListener__
 * WARNING: Using MultiplexListener could give you error code 0 problems when signing on
 * To get it working:
 * (1) Configure username(s) and password(s)
 * (2) Start up script
 * (3) Talk to bot(s)
require_once "bluetoc/EventHandlers/ObjectBased.php";

TimeTellingBot extends AimClient
TimeTellingBot($user, $pass)
$this->debug_mode = false;
$this->aim_user = $user;
$this->aim_pass = $pass;
$this->user = $user;
// Handle once we've signed on
function event_sign_on($args)
"{$this->user}: Yay! I've signed in!\n";
$this->set_info("<font face=Georgia>I tell the time! YAY!<br><br>I am powered by BlueTOC (AIM connection class for PHP)</font>");
// Handle when we get an instant message
function event_im($args)
"{$this->user}: {$args['user']} IMed me!\n";
// Remember that AIM IMs usually have HTML
        // so we must strip it so that we can
        // easily parse it
$message = strip_tags($args['message']);
// Let's check if they're telling us to
        // have another time bot sign on
        // The following responds to anyone! If you were to
        // restrict to only some screen names, you would do
        // a check on $args['user']
if(preg_match("`^signon ([A-Za-z0-9]+) (.*)$`", $message, $m))
"Signing on {$m[1]}\n";
$this->send_im($args['user'], "<font face=Georgia>Trying to sign on <b>{$m[1]}</b></font>", FALSE);
$listener->add_client(new TimeTellingBot($m[1], $m[2]));
// Let's tell the time
$this->send_im($args['user'], "<font face=Georgia>The time now is " . date('r') . "</font>", FALSE);
// These are a list of errors in English
        // Most, if not all, errors will return an error number
        // and not the error description
$connection_errors = array(
100 => 'Data unable to be sent',
200 => 'Flapon',
201 => 'Data not received from server after FLAPON packet',
202 => 'Invalid FLAP SIGNON response from the server',
203 => 'Invalid response from the server');
$aim_errors = array (
0 => 'Success',
1 => 'AOLIM Error: Unknown Error',
2 => 'AOLIM Error: Incorrect Arguments',
3 => 'AOLIM Error: Exceeded Max Packet Length (1024)',
4 => 'AOLIM Error: Reading from server',
5 => 'AOLIM Error: Sending to server',
6 => 'AOLIM Error: Login timeout',
901 => 'General Error: %s not currently available',
902 => 'General Error: Warning of %s not currently available',
903 => 'General Error: A message has been dropped, you are exceeding the server speed limit',
950 => 'Chat Error: Chat in %s is unavailable',
960 => 'IM and Info Error: You are sending messages too fast to %s',
961 => 'IM and Info Error: You missed an IM from %s because it was too big',
962 => 'IM and Info Error: You missed an IM from %s because it was sent too fast',
970 => 'Dir Error: Failure',
971 => 'Dir Error: Too many matches',
972 => 'Dir Error: Need more qualifiers',
973 => 'Dir Error: Dir service temporarily unavailble',
974 => 'Dir Error: Email lookup restricted',
975 => 'Dir Error: Keyword ignored',
976 => 'Dir Error: No keywords',
977 => 'Dir Error: Language not supported',
978 => 'Dir Error: Country not supported',
979 => 'Dir Error: Failure unknown %s',
980 => 'Auth Error: Incorrect nickname or password',
981 => 'Auth Error: The service is temporarily unavailable',
982 => 'Auth Error: Your warning level is too high to sign on',
983 => 'Auth Error: You have been connecting and disconnecting too frequently. Wait 10 minutes and try again. If you continue to try, you will need to wait even longer.',
989 => 'Auth Error: An unknown signon error has occurred %s');
// Let's see what kind of error we are faced with
// Connection error
"* Connection error: {$connection_errors[$args['number']]} ({$args['number']})\n";
// AIM is giving us an error
"* AIM error: {$aim_errors[$args['number']]} ({$args['number']})\n";

// Allows cloning
$listener = new MultiplexListener();
$listener->add_client(new TimeTellingBot('screenname1', 'password1'));
//$listener->add_client(new TimeTellingBot('screenname2', 'password2'));
//$listener->add_client(new TimeTellingBot('screenname3', 'password3'));
$listener->run($errno, $errstr);