Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/03/2010, à 15: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, à 16:29)

Hors ligne

#2 Le 04/03/2010, à 17: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, à 18:03)

Hors ligne

#3 Le 04/03/2010, à 23: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
    }

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#4 Le 05/03/2010, à 00: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 hmm

( 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 05/03/2010, à 00:52)

Hors ligne

#5 Le 05/03/2010, à 13:23

sputnick

Re : Bot irc en perl

Tu peux t'inspirer de celui la aussi : http://www.perlmonks.org/?node=craft


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 05/03/2010, à 17:47

JB-home

Re : Bot irc en perl

merci bien, j'vais regarder

Hors ligne

#7 Le 05/03/2010, à 18:55

JB-home

Re : Bot irc en perl

edit

Dernière modification par z0rg> (Le 05/03/2010, à 19:56)

Hors ligne

#8 Le 16/06/2012, à 17:41

Maisondouf

Re : Bot irc en perl

JB-home a écrit :

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 sad

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