Jump to content

Recommended Posts

Hey guys,

 

I've been working on a IRC bot, but there is something wrong with it, it is ment to be an endless loop, but it runs out of memory before it joins D=

Error:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in /var/www/random/bot2.php on line 90

 

Code:

<?php
set_time_limit(0);
ini_set('desplay_errors', 'on');
$configure = array(
	'server' => 'irc.freenode.net',
	'port' => 6667,
	'nick' => 'TNB_BOT',
	'name' => 'JBot',
	'channel' => '##thenewboston',
	'pass' => '***'
);
class JBot{
	//TCP connection holder.
	public $socket;

	//Message holder.
	public $msg = array();

	/*
	 * Constucter.
	 * Opens the server connection, and logs in the bot.
	 * 
	 * @param array.
	 */
	function __construct($configure){
		 $this->socket = fsockopen($configure['server'], $configure['port']);
		 $this->login($configure);
		 $this->main();
		 $this->send_data('JOIN', $this->configure['channel']);
	}

	/*
	 * Logs bot in to server
	 * 
	 * @param array.
	 */

	function login($configure){
		$this->send_data('USER', $configure['nick'] . ' Jragon.co.uk ' . $configure['nick'] . ' :' . $configure['name']);
		$this->send_data('NICK', $configure['nick']);
	}

	/*
	 * Main function, used to grab all data.
	 * 
	 */

	function main(){
		$data = fgets($this->socket, 128);
		flush();
		$this->ex = explode(' ', $data);

		if($this->ex[0] == 'PING'){
			//Plays ping-pong with the server..
			$this->send_data('PONG', $this->ex[1]);
		}
		$command = str_replace(array(chr(10), chr(13)), '', $this->ex[3]);

		//List of commands the bot responds to.
		switch($command){
			case ':!say':
				$this->say();
			break;
			case ':!join':
				$this->join_channel($this->ex[4]);
			break;

			case ':!quit':
				$this->send_data('QUIT', $this->ex[4]);
			break;

			case ':!op':
				$this->op_user();
			break;	

			case ':!deop':
				$this->op_user('','', false);
			break;

			case ':!time':
				$this->send_data("PRIVMSG", "Time" . date("F j, Y, g:i a" . time()));
			break;


			case 'Hello':
				fputs($socket,"PRIVMSG " . $this->ex[2] . " : Hi!\n");
			break;

		}
		$this->main();
	}
	function say(){
		$arraysize = sizeof($this->ex);
		//1,2,3 are just nick and chan, 4 is where text starts 
		$count = 4;
		while($count <= $arraysize) {
			$text = $text . " " . $this->ex[$count];
			$count++;
		}
		$this->privmsg($text, $this->ex[2]);
		unset($text);
	}

	function privmsg($message, $to){
		fputs($socket,"PRIVMSG " . $to . " :" . $message . "\n");
	}


	/*
	 * Sends data to the server.
	 */
	function send_data($cmd, $msg = null){
		 if($msg == null){
			 fputs($this->socket, $cmd . "\n");
			 echo "<b>$cmd</b>";
		 }else{
			fputs($this->socket, $cmd.' '.$msg."\n");
			echo "<b>$cmd $msg</b>";
		 }
	}

	/*
	 * Joins a channel.
	 * 
	 * @param text
	 */
	function join_channel($channel){
		$this->send_data('JOIN', $channel);
	}
	/*
	 * Give/Take operator status.
	 */ 
	function op_user($channel = '', $user = '', $op = true){
		if($channel == '' || $user == ''){
			if($channel == ''){
				$channel = $this->ex[2];
			}
			if($user == ''){
				 $user = strstr($this->ex[0], '!', true);
			};
			if($op){
				$this->send_data('MODE', $channel . ' +o ' . $user);
			}else{
				$this->send_data('MODE', $channel . ' -o ' . $user);
			}
		}
	}
}
$bot = new JBot($configure);		 






?>

Link to comment
https://forums.phpfreaks.com/topic/227559-irc-bot-help/
Share on other sites

<?php

//Opens the socket
$socket = fsockopen("irc.freenode.com",6667);

//Sends Host name
fputs($socket, "USER Jragon_Bot Jragon.co.uk PHP :Jragon_Bot\n");

//Send the nickname
fputs($socket, "NICK Jragon_Bot\n");

//Joins ##thenewboston
fputs($socket, "JOIN ##thenewboston\n");

//Set commands
$commands = array(
   "!version",
   "!say",
   "!exit",
   "Hello"
);
while(1){

//Gets data
while($data = fgets($socket, 128)){

	//Puts data into an array.
	$get = explode(' ', $data);

	//Server pinged, time to reply
	if($get[0] == "PING"){
		fputs($socket, "PONG " . $get[1] . "\n");
	}

	if(substr_count($get[2],"#")) {
		$nick = explode(':',$get[0]);
		$nick = explode('!',$nick[1]);
		$nick = $nick[0];
		$chan = $get[2];
		$num = 3;
		if($num == 3){
			$split = explode(':',$get[3],2);
			$text = $split[1];

			//Processing of commands
			//This is where we start processing the commands we entered in earlier
			if(in_array(rtrim($text),$commands)) {
				switch(rtrim($text)) {
					case "!version":
						fputs($socket,"PRIVMSG $chan : Jragon bot, version 0.01 Alpha\n Developed by Jragon(Rory Anderson)\n");
					break;
					case "!say":
						$arraysize = sizeof($get);
						//1,2,3 are just nick and chan, 4 is where text starts 
						$count = 4;
						while($count <= $arraysize) {
							$saytext = $saytext." ".$get[$count];
							$count++;
						}
						fputs($socket,"PRIVMSG ".$get[2]." :".$saytext."\n");
						unset($saytext);
					break;
					case "!exit":
						fputs($socket,"PRIVMSG $chan :Shutting Down Jragon's very awesome bot!\n");
						fputs($socket,"QUIT Client Disconnected!\n");
							//IMPORANT TO HAVE THE DIE(), this throws the script out of the infinite while loop!
							die('Client Disconnected!');
					break;
					case "Hello":
						fputs($socket,"PRIVMSG $chan :Hi!\n");
					break;
				}
			}
		}
	}
}
}

//Shows the text in the browser as Time - Text
echo nl2br(date('G:i:s')."-".$data);

//Flush it out to the browser
flush();


?>

That is my first bot that worked...

Link to comment
https://forums.phpfreaks.com/topic/227559-irc-bot-help/#findComment-1173952
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.