Pages : 1
#1 Le 04/03/2010, à 14:28
- JB-home
Bot irc en perl
j'ai trouvé les sources d'un bot en perl pour irc, j'aimerais pouvoir rajouté un anti-flood, mais je ne sait pas quoi rajouté :s
voici le code de mon bot :
#!/usr/bin/perl
use Net::IRC;
use strict;
use warnings;
use POSIX qw(strftime);
my $serveur = "irc.freenode.net"; #Serveur de connection du bot
my $nick = "****"; #nick du bot
my $pass = '*****';
my $chan = "#*******"; #chan ou sera le bot
my $irc = new Net::IRC;
my $conn = $irc->newconn(
'Server' => $serveur,
'Port' => 6667,
'Nick' => $nick,
);
$conn->add_handler( 376, \&join_channel );
$conn->add_handler( 422, \&join_channel );
$conn->add_handler('public', \&public);
$conn->add_handler('msg', \&msg);
$conn->add_handler('kick', \&on_kick);
$conn->add_handler('join', \&on_join);
$conn->add_handler ('part', \&on_part);
$conn->add_handler ('notice',\&on_notice);
$conn->add_handler('msg', \&on_private); # En privé
$irc->start();
sub join_channel {
my ($conn,$event ) = @_;
my ($self,$event ) = @_;
print( 'Connected !' . "\n" );
$conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
$conn->join( $chan );
$conn->privmsg ($chan, "Salut a tous !");
}
sub public {
my ($self, $event) = @_;
my ($text) = ($event->args);
my ($nick) = ($event->nick);
my ($user) = ($event->nick);
my $date = strftime "%a %e %b %Y %H:%M:%S ", localtime;
print "<" . $event->{'nick'} . ">\t| $text\n";
if($text =~ /plop/i) { $self->privmsg($chan,"plop $nick"); }
if($text =~ /bot/i) { $self->privmsg ($chan, "un bot ? ou ca ?");}
if($text =~ /Salut/i) {$self->privmsg($chan, "Salut $nick ;)");}
if ($text=~ /sexe/i) {$self->privmsg ($chan, "$nick pas de ça ici !");}
if ($text=~ /hack/i) {$self->privmsg ($chan, "hummm ça sent pas bon cette histoire");}
if ($text=~ /heure/i) {$self->privmsg ($chan, "on est $date");}
}
sub on_kick {
my ($self, $event) = @_;
$self->privmsg ($chan, "etttttt un kick ! un !!");
}
sub on_join {
my ($self, $event) = @_;
my ($nick) = ($event->nick);
my ($me) = ("Omel-lemol");
if ($nick ne $me) {$self->privmsg ($chan, "Salut $nick !");}
$conn->{'connected'} = 1;
$conn->privmsg('nickserv', 'IDENTIFY ' . $pass);
$conn->print("Identify : $nick $pass");
}
sub on_part {
my ($self, $event) = @_;
my ($nick) = ($event->nick);
$self->privmsg ($chan, "$nick est partit... le lacheur !");
}
sub on_notice {
my ($self, $event) = @_;
my ($nick) = ($event->nick);
my ($text) = ($event->args);
$conn->print("NOTICE<" . $event->nick() . ">\t| $text");
}
sub msg {
my ($self, $event) = @_;
my ($nick) = ($event->nick);
my ($text) = ($event->args);
if ($text=~ /pass/i) {$self->mode ($chan, "+o $nick")}
}
sub on_private
{
my ($conn, $event) = @_;
my $text = $event->{'args'}[0];
$conn->print("PRIVE<" . $event->nick() . ">\t| $text");
} # Fin on_private
Dernière modification par z0rg> (Le 04/03/2010, à 15:29)
Hors ligne
#2 Le 04/03/2010, à 16:28
- JB-home
Re : Bot irc en perl
j'ai trouvé comment renvoyé dans la console, se qui est dit sur le salon, maintenant faut que je trouve la fonction "anti-flood" et autorisé le bot à "kick" ou "ban"
où m'indiquer de la doc adéquate ?
edit : j'ai trouvé ça mais je ne sait l'intégré au script du bot
http://www.hawkee.com/snippet/3107/
Dernière modification par z0rg> (Le 04/03/2010, à 17:03)
Hors ligne
#3 Le 04/03/2010, à 22:39
- sputnick
Re : Bot irc en perl
Ya mieux comme bot : http://www.google.com/codesearch/p?hl=en#auXjvMWYGk0/~piman/archive/funbot-core-2.0.4.tar.gz|JNExm3myXoc/funbot-2.0.4/funbot&q=%22Net::IRC%22%20kick
Sinon, si tu veut garder ta base, j'ai commencé ça, il faut trouver le moyen de lancer la commande de kick ( s'inspirer de l'autre script par exemple ).
sub public {
if (length($text) > 10) { # Si le message fait plus de 10 caracteres
print $/; # <=================== Commande a executer ici
}
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#4 Le 04/03/2010, à 23:17
- JB-home
Re : Bot irc en perl
bin enfaite c'est la commande pour kiker depuis le bot que je ne sait faire, si je lui met "/kick" ça s'affiche tel quel sur le salon
( oui je préfère gardé ma base car je comprend mieux, et en plus j'ai déjà apporté des modification )
peut être que faut que je voit avec ça --> http://www.squalenet.net/fr/pc/articles/ecrire-un-bot-irc-en-perl-part2.php5#II
mais ça me dit pas comment envoyé la commande kick.
Dernière modification par z0rg> (Le 04/03/2010, à 23:52)
Hors ligne
#5 Le 05/03/2010, à 12:23
- sputnick
Re : Bot irc en perl
Tu peux t'inspirer de celui la aussi : http://www.perlmonks.org/?node=craft
Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. Confucius
https://sputnick.fr
Hors ligne
#6 Le 05/03/2010, à 16:47
- JB-home
Re : Bot irc en perl
merci bien, j'vais regarder
Hors ligne
#7 Le 05/03/2010, à 17:55
- JB-home
Re : Bot irc en perl
edit
Dernière modification par z0rg> (Le 05/03/2010, à 18:56)
Hors ligne
#8 Le 16/06/2012, à 16:41
- Maisondouf
Re : Bot irc en perl
edit
Je reprends ce post parce que j'ai repris le source en perl pour faire des test sur mon SheevaPlug.
Je voulais savoir si dans la commande
$conn->join( $chan );
On pouvais inclure le password du canal, genre :
$conn->join( $chan.' '.$chanpass );
Et, deuxièmement, est que je peux utiliser le fonction $conn->privmsg() pour envoyer une commande de verrouillage du canal, par exemple:
$conn->privmsg('chanserv', '+k '.$chanpass);
Ce petit bot marche bien mais je voudrais qu'il me maintienne un canal privé avec password constamment ouvert sur le serveur.
J'ai pas envie de me taper toute la doc de la librairie perl..
J'ai installé Hybrid IRC comme serveur et je ne sais pas si on peut lui faire faire ça directement.
Y a presque plus de doc
Sinon est que il y a moyen d'arriver à mes fins avec un autre moyen (un autre bot ou un autre serveur)
Merci
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
Pages : 1