L* R*
HOME FORUM DOWNLOADS
Content
  Links
     Browse SVN
     SVN Commit log
     Documentation (Wiki)
  Developers
     Taskmanager
User
Welcome, Guest. Please login or register.
Did you miss your activation email?
December 01, 2008, 12:12:34 PM

Login with username, password and session length
Search



Advanced search
Support GoPHP5.org
BeBot - An Anarchy Online/Age Of Conan chat automaton > Forum > Development > Coding and development discussion > Topic: updated Rooster_RAID.php (from svn)
Pages: [1]   Go Down
« previous next »
Print
Author Topic: updated Rooster_RAID.php (from svn)  (Read 518 times)
0 Members and 1 Guest are viewing this topic.
Wanuarmi
BeBot Contributor
Apprentice
*******
Offline Offline

Posts: 121


updated Rooster_RAID.php (from svn)
« on: January 22, 2006, 04:46:41 PM »

No changes, just code organization, removed alot of duplicated code and made functions for them

The tell() and pgmsg() functoins had the same code, changing only output :P

Its alot easier now to find stuff and modify.

Code:
<?
/*
* Rooster.php - Handle member rooster
*
* BeBot - An Anarchy Online Chat Automaton
* Copyright (C) 2004 Jonas Jax
*
* Developed by Blondengy (RK1)
* Special thanks goes out to Khalem (RK1) for his support.
*
* File last changed at $LastChangedDate$
* Revision: $Id$
*/

/*
Prepare MySQL database
*/
$db -> query("CREATE TABLE IF NOT EXISTS members
                (id INT NOT NULL PRIMARY KEY,
                nickname VARCHAR(25),
                firstname VARCHAR(25),
                lastname VARCHAR(25),
                rank TINYINT,
                rank_name VARCHAR(20),
                level INT,
                profession VARCHAR(15),
                gender VARCHAR(10),
                breed VARCHAR(10),
                guild VARCHAR(35),
                pic VARCHAR(100),
                lvlrange VARCHAR(10),
updated INT,
                ailevel INT,
                aititle VARCHAR(25))");

$db -> query("CREATE TABLE IF NOT EXISTS member_settings
                (id INT NOT NULL PRIMARY KEY,
                on_list INT(1) DEFAULT '0',
                notify INT(1) DEFAULT '1')");


$rooster = new Rooster($bot);
$commands["tell"]["member"] = &$rooster;
$commands["tell"]["rosterupdate"] = &$rooster;
$commands["tell"]["notify"] = &$rooster;
$commands["tell2"]["member"] = &$rooster;
$commands["tell"]["members"] = &$rooster;
$commands["pgmsg"]["member"] = &$rooster;
$commands["pgmsg"]["members"] = &$rooster;
$commands["pgjoin"][] = &$rooster;

$cron["24hour"][] = &$rooster;

/*
The Class itself...
*/
class Rooster
{
var $bot;


/*
Constructor:
Hands over a referance to the "Bot" class
*/
function Rooster (&$bot)
{
$this -> bot = &$bot;
}



/*
This gets called on a tell with the command
*/
function tell($name, $msg)
{
$this -> bot -> send_tell($name, proccess_command($name, $msg));
}



/*
This gets called on a tell with the command from person outside guild
*/
function tell2($name, $msg)
{
if ($this -> bot -> admin -> in_group($name, "superadmin"))
$this -> bot -> send_tell($name, proccess_command($name, $msg));
}



/*
This gets called on a priv group msg with the command
*/
function pgmsg($name, $msg)
{
$this -> bot -> send_pgroup(proccess_command($name, $msg));
}



/*
This gets called if someone joins the privgroup
*/
function pgjoin($name)
{
if ($this -> bot -> is_member($name) == 1)
{
$result = $this -> bot -> db -> select("SELECT updated FROM members WHERE id = " .
$this -> bot -> aoc -> get_uid($name));
if ((time() - $result[0][0]) > (60 * 60 * 48))
{
$members = $this -> get_player_info($name);


if (($members["level"] >= 1) && ($members["level"] <= 99))
$members["lvlrange"] = "1-99";
else if (($members["level"] >= 100) && ($members["level"] <= 149))
$members["lvlrange"] = "100-149";
else if (($members["level"] >= 150) && ($members["level"] <= 199))
$members["lvlrange"] = "150-199";
else if (($members["level"] >= 200) && ($members["level"] <= 214))
$members["lvlrange"] = "200-214";
else if (($members["level"] >= 215) && ($members["level"] <= 220))
$members["lvlrange"] = "215-220";
else
$members["lvlrange"] = "unknown";

if (!empty($members["level"]))
{
$this -> bot -> aoc -> buddy_add($members["id"]);

$this -> bot -> db -> query("DELETE FROM members WHERE id = " . $members["id"]);
$this -> bot -> db -> query("INSERT INTO members (id, nickname, firstname, lastname, rank, rank_name, level, profession, gender, breed, pic, guild, lvlrange, updated, ailevel, aititle)
                        VALUES ('" . $members["id"] . "',
                                '" . $members["nickname"] . "', '" . $members["firstname"] . "',
                                '" . $members["lastname"] . "', '" . $members["rank"] . "',
                                '" . $members["rank_name"] . "', '" . $members["level"] . "',
                                '" . $members["profession"] . "', '" . $members["gender"] . "',
                                '" . $members["breed"] . "', '" . $members["pic"] . "',
                                '" . $members["guild"] . "', '" . $members["lvlrange"] . "',
                                " . time() . ", '" . $members["ailevel"] . "',
                                '" . $members["aititle"] . "')");
}
}
}
}



/*
* Takes care of commands and returns a message to channel used
*/
function proccess_command($name, $msg)
{
if ($this -> bot -> admin -> in_group($name, "admin")) //admin and superadmin
{
if (preg_match("/^" . $this -> bot -> commpre . "member del (.+)$/i", $msg, $info))
return $this -> delete_member($info[1]);
else if (preg_match("/^" . $this -> bot -> commpre . "members$/i", $msg))
return $this -> members();
else if (preg_match("/^" . $this -> bot -> commpre . "members list$/i", $msg))
$this -> list_members($name);
else if (preg_match("/^" . $this -> bot -> commpre . "member (.+)$/i", $msg, $info))
return $this -> add_member($info[1]);
else if (preg_match("/^" . $this -> bot -> commpre . "rosterupdate$/i", $msg))
$this -> update_roster();
}
else if(preg_match("/^" . $this -> bot -> commpre . "notify (on|off)$/i", $msg, $info))
{
$this -> set_notify($name, strtolower($info[1]));
}
else if(preg_match("/^" . $this -> bot -> commpre . "notify/i", $msg, $info))
{
return "Please use /tell <botname> <pre>notify (on|off)";
}
else
{
return "Your are not an admin of this bot";
}
}



/*
* Add a member
*/
function add_member($name, $add_name)
{
$result = $this -> bot -> db -> select("SELECT nickname FROM members WHERE id = " . $this -> bot -> aoc -> get_uid($add_name));
if (empty($result))
{
if (!$this -> bot -> aoc -> get_uid($add_name))
return "Player <font color=#ffff00>" . $add_name . "</font> does not exist";
else
{
$members = $this -> get_player_info($add_name);


if (($members["level"] >= 1) && ($members["level"] <= 99))
$members["lvlrange"] = "1-99";
else if (($members["level"] >= 100) && ($members["level"] <= 149))
$members["lvlrange"] = "100-149";
else if (($members["level"] >= 150) && ($members["level"] <= 199))
$members["lvlrange"] = "150-199";
else if (($members["level"] >= 200) && ($members["level"] <= 214))
$members["lvlrange"] = "200-214";
else if (($members["level"] >= 215) && ($members["level"] <= 220))
$members["lvlrange"] = "215-220";
else
$members["lvlrange"] = "unknown";

$this -> bot -> db -> query("INSERT INTO members (id, nickname, firstname, lastname, rank, rank_name, level, profession, gender, breed, pic, guild, lvlrange, updated, ailevel, aititle)
                        VALUES ('" . $members["id"] . "',
                                '" . $members["nickname"] . "', '" . $members["firstname"] . "',
                                '" . $members["lastname"] . "', '" . $members["rank"] . "',
                                '" . $members["rank_name"] . "', '" . $members["level"] . "',
                                '" . $members["profession"] . "', '" . $members["gender"] . "',
                                '" . $members["breed"] . "', '" . $members["pic"] . "',
                                '" . $members["guild"] . "', '" . $members["lvlrange"] . "',
  " . time() . ", '" . $members["ailevel"] . "',
                                '" . $members["aititle"] . "')");

$this -> bot -> db -> query("INSERT INTO raid_points (id, points) VALUES (" . $members["id"] . ", 0)");
$this -> bot -> db -> query("INSERT INTO member_settings (id) VALUES (" . $members["id"] . ")");
$this -> bot -> send_tell($add_name, "<font color=#ffff00>" . $name . "</font> has added you to the bot.");
return "Player <font color=#ffff00>" . $add_name . "</font> has been added to the bot.";
}
}
else
return "<font color=#ffff00>" . $result[0][0] . "</font> is already a member.";
}



/*
* Shows how many members
*/
function members($member)
{
$result = $this -> bot -> db -> select("SELECT count(*) FROM members");
$result = $this -> bot -> db -> select("SELECT nickname FROM members ORDER BY nickname ASC LIMIT 0,300");
foreach($result as $nick)
$this -> bot -> aoc -> buddy_add($nick[0]);
for ($i = 0; $i < 300; $i++)
$this -> bot -> aoc -> get_packet();
$result = $this -> bot -> db -> select("SELECT nickname FROM members ORDER BY nickname ASC LIMIT 300,300");
foreach($result as $nick)
$this -> bot -> aoc -> buddy_add($nick[0]);
return "<font color=#ffff00>" . $result[0][0] . "</font> members on the bot.";
}



/*
* Delete a member
*/
function delete_member($member)
{
$result = $this -> bot -> db -> select("SELECT nickname FROM members WHERE id = " . $this -> bot -> aoc -> get_uid($member));
if (!empty($result))
{
$id = $this -> bot -> aoc -> get_uid($info[1]);
$this -> bot -> db -> query("DELETE FROM members WHERE id = " . $id);
$this -> bot -> db -> query("DELETE FROM raid_points WHERE id = " . $id);
$this -> bot -> db -> query("DELETE FROM member_settings WHERE id = " . $id);
$this -> bot -> aoc -> buddy_remove($id);
return "<font color=#ffff00>" . $info[1] . "</font> has been removed from member list.";
}
else
return "<font color=#ffff00>" . $info[1] . "</font> is not a member.";
}



/*
* Sets the notify state
*/
function set_notify($name, $status)
{
$id = $this -> bot -> aoc -> get_uid($name);
if ($status == "off")
{
$this -> bot -> aoc -> buddy_remove($id);
$this -> bot -> db -> query("UPDATE member_settings SET on_list = '0', notify = '0' WHERE id = '".$id."'");
}
else
$this -> bot -> db -> query("UPDATE member_settings SET notify = '1' WHERE id = '".$id."'");
$this -> bot -> send_tell($name, "Notify has been switched <font color=#ffff00>" . $status . "</font>.");
}



/*
* Update the roster of the bot
* This may take a while and goes heavy on the MySQL server
* so please use with care (in other words: only when updateing the bot)
*/
function update_roster()
{
// Set all people as not on list
$this -> bot -> db -> query("UPDATE member_settings SET on_list = '0'");

// Select all members
$result = $this -> bot -> db -> select("SELECT id FROM members");
for ($i = 0; $i < count($result); $i++)
{
// Remove everyone from list
if ($this -> bot -> aoc -> buddy_exists($result[$i][0]))
$this -> bot -> aoc -> buddy_remove($result[$i][0]);

// Add them to member_settings list if they're not on it already.
$res = $this -> bot -> db -> select("SELECT id FROM member_settings WHERE id = '" . $result[$i][0] . "'");
if (empty($res[0][0]))
$this -> bot -> db -> query("INSERT INTO member_settings (id) VALUES ('" . $result[$i][0] . "')");
}

// Add 980 people onto members-list...
$result = $this -> bot -> db -> select("SELECT members.id, nickname FROM members, member_settings WHERE members.id = member_settings.id AND member_settings.notify = 1 ORDER  BY updated DESC  LIMIT 0 , 980");
for ($i = 0; $i < count($result); $i++)
{
if ($id = $this -> bot -> aoc -> get_uid($result[$i][1]))
{
if ($id != $result[$i][0])
{
$this -> bot -> send_pgroup("The character <font color=#ffff00>" . $result[$i][1] . "</font> has rerolled. Correcting Member-ID.");
$this -> bot -> db -> query("UPDATE members SET id = '" . $id . "' WHERE id = '" . $result[$i][0] . "'");
$this -> bot -> db -> query("UPDATE raid_points SET id = '" . $id . "' WHERE id = '" . $result[$i][0] . "'");
$this -> bot -> db -> query("UPDATE member_settings SET id = '" . $id . "' WHERE id = '" . $result[$i][0] . "'");
}
$this -> bot -> aoc -> buddy_add($id);
$this -> bot -> db -> query("UPDATE member_settings SET on_list = '1' WHERE id = '" . $result[$i][0] . "'");
}
else
$this -> bot -> send_pgroup("The character <font color=#ffff00>" . $result[$i][1] . "</font> might have been deleted but is still on the members list.");
}
}



/*
* Update the rooster every 24h
*/
function cron()
{
$this -> bot -> log("CRON", "ROSTER", "Updateing buddylist");
$num = 0;

// Select oldest update
$oldest = $this -> bot -> db -> select("SELECT MIN(updated) FROM members, member_settings WHERE members.id = member_settings.id AND on_list = '1'");
$oldest = $oldest[0][0];

// Select all not on buddylist with notify on with newer update
$new = $this -> bot -> db -> select("SELECT members.id, nickname FROM members, member_settings WHERE members.id = member_settings.id AND on_list = '0' AND notify = '1' AND updated > '".$oldest."'");

// If changes have accured...
if (!empty($new[0][0]))
{
$num = count($new);
$start = 980 - $num;

// Select all those on buddy list to be removed
$remove = $this -> bot -> db -> select("SELECT members.id, nickname FROM members, member_settings WHERE members.id = member_settings.id AND member_settings.notify = 1 ORDER  BY updated DESC  LIMIT $start , $num");

// Remove them
if (!empty($remove))
{
for ($i = 0; $i < count($remove); $i++)
{
$this -> bot -> log ("BUDDY", "REM", $remove[$i][1]);
$this -> bot -> aoc -> buddy_remove($remove[$i][1]);
$this -> bot -> db -> query("UPDATE member_settings SET on_list = '0' WHERE id = '" . $remove[$i][0] . "'");
}
}
// Add the new ones
for ($i = 0; $i < count($new); $i++)
{
$this -> bot -> log ("BUDDY", "ADD", $new[$i][1]);
$this -> bot -> aoc -> buddy_add($new[$i][0]);
$this -> bot -> db -> query("UPDATE member_settings SET on_list = '1' WHERE id = '" . $new[$i][0] . "'");
}
}
$this -> bot -> log("CRON", "ROSTER", "Done updateing buddylist: " . $num. " new people getting messages.");
}



function list_members($name)
{
$result = $this -> bot -> db -> select("SELECT nickname, guild FROM members ORDER BY guild DESC");
$msg = "";
for ($i = 0; $i < count($result); $i++)
$msg .= $result[$i][0] . " (" . $result[$i][1] . ")\n";

$this -> bot -> send_tell($name, $this -> bot -> make_blob("Members", $msg));
}


function get_player_info($name)
{
$member = $this -> bot -> get_site("http://www.anarchy-online.com/character/bio/d/" . $this -> bot -> dimension . "/name/" . strtolower($name) . "/bio.xml");
$members["nickname"] = ucfirst(strtolower($add_name));
$members["firstname"] = $this -> bot -> xmlparse($member, "firstname");
$members["lastname"] = $this -> bot -> xmlparse($member, "lastname");
$members["rank"] = $this -> bot -> xmlparse($member, "rank_id");
$members["rank_name"] = $this -> bot -> xmlparse($member, "rank");
$members["level"] = $this -> bot -> xmlparse($member, "level");
$members["profession"] = $this -> bot -> xmlparse($member, "profession");
$members["gender"] = $this -> bot -> xmlparse($member, "gender");
$members["guild"] = $this -> bot -> xmlparse($member, "organization_name");
$members["breed"] = $this -> bot -> xmlparse($member, "breed");
$members["pic"] = $this -> bot -> xmlparse($member, "pictureurl");
$members["id"] = $this -> bot -> aoc -> get_uid($members["nickname"]);
$members["ailevel"] = $this -> bot -> xmlparse($member, "defender_rank_id");
$members["aititle"] = $this -> bot -> xmlparse($member, "defender_rank");
return $members;
}
}
?>
Logged
Xenixa
BeBot Contributor
Expert
*******
Offline Offline

Posts: 307



Re: updated Rooster_RAID.php (from svn)
« Reply #1 on: January 23, 2006, 08:37:58 AM »

Hmm... interesting. I see this has alot of buddy list updating and member_settings table updating in the cron job and the manual forced roster update function.. but umm where exactly does it auto populate the Members table?
Logged

<<< Hack's in Zend Studio

All my Custom Bebot files may be Found Here <-clicky
Wanuarmi
BeBot Contributor
Apprentice
*******
Offline Offline

Posts: 121


Re: updated Rooster_RAID.php (from svn)
« Reply #2 on: January 24, 2006, 01:27:28 PM »

not sure... I dont even know whats that for, it would break bots with more than 1k member it seems... I think its the exact same function from the one in svn, but let me know if I messed anything
Logged
Pages: [1]   Go Up
Print
BeBot - An Anarchy Online/Age Of Conan chat automaton > Forum > Development > Coding and development discussion > Topic: updated Rooster_RAID.php (from svn)
« previous next »
 
Jump to:  

Recent
[request] Raid timers
by Alreadythere
[Today at 11:42:32 AM]

Shared DB online list
by Temar
[Today at 01:55:47 AM]

relay colors
by Temar
[Today at 01:54:56 AM]

BeBot v0.6.0 released
by Alreadythere
[November 30, 2008, 05:32:00 PM]

Change to Bid.php
by Temar
[November 30, 2008, 11:41:44 AM]

OnlineOrg
by Jiheld
[November 29, 2008, 12:44:27 PM]

Silly Newbie Question.
by Temar
[November 29, 2008, 12:00:02 PM]

massive_pvp_time_table 1
by gerborg
[November 29, 2008, 06:55:35 AM]

Bot not see Guild Chat
by Delvar
[November 28, 2008, 08:30:34 AM]

Starting Bot
by Allisande
[November 28, 2008, 07:08:21 AM]
Stats
Members
Total Members: 1243
Latest: Whackoeng
Stats
Total Posts: 11143
Total Topics: 1505
Online Today: 21
Online Ever: 168
(July 01, 2007, 09:30:02 PM)
Users Online
Users: 3
Guests: 20
Total: 23
gerborg
Ifris

Powered by SMF 1.1.7 | SMF © 2006-2008, Simple Machines LLC
TinyPortal v0.9.8 © Bloc | NewDef design by Bloc
Page created in 0.395 seconds with 28 queries. (Pretty URLs adds 0.041s, 4q)
Loading...