Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

XCHAT - SCRIPT PERL AWAY


Information sur la source

Description

Un petit script codé en perl pour xchat remplissant les fonctions d'away.

Ce n'est pas une creation mais une adaptation de la fonction away du script hyperion.

J'ai modifié 2 3 trucs et l'ai francisée.

Mettez le script ci-dessous dans un fichier nommé 'away.pl' et enregistrez le dans le repertoire de xhat ( ~/.xchat2/ sous linux )
 

Source

  • #!/usr/bin/perl -w
  • # Away Script pour x-chat basé sur le script Hyperion
  • # Version 1.0 du 14/07/2005
  • ###############################################################################################"
  • # CONFIGURATION
  • ###############################################################################################"
  • # chemin du fichier conservant les logs
  • $hlog_file = "~/.hyperion.awaylog";
  • # complément du pseudo à utiliser lors du passage en absence
  • $haway_nick = "[away]";
  • # raison par defaut de l'absence
  • $hdefreason = "parti, donc plus la c'est à dire absent !";
  • # effacer les logs apres les avoir lus
  • $hautoclear = 1;
  • ###############################################################################################"
  • sub make_my_time;
  • sub hyp_log;
  • sub wide_msg;
  • sub join_handler;
  • sub privmsg_handler;
  • sub goaway_handler;
  • sub comeback_handler;
  • sub vlog_handler;
  • sub clog_handler;
  • $hreason=$hdefreason;
  • IRC::register("Away", "1.00", "", "");
  • IRC::print "\002\0034:: Chargement du script: Away v1.0 ::\n";
  • IRC::add_command_handler("away", "goaway_handler");
  • IRC::add_command_handler("back", "comeback_handler");
  • IRC::add_command_handler("vlog", "vlog_handler");
  • IRC::add_command_handler("clog", "clog_handler");
  • IRC::add_message_handler("PRIVMSG", "privmsg_handler");
  • IRC::add_print_handler("Join", "join_handler");
  • IRC::print "\002\0034Away - Les commandes\n\n";
  • IRC::print "\002\0033/away [raison] -- Se mettre absent\n";
  • IRC::print "\002\0033/back -- Etre de retour\n";
  • IRC::print "\002\0033/vlog -- Voir les logs\n";
  • IRC::print "\002\0033/clog -- Effacer les logs\n";
  • sub make_my_time {
  • ($sec, $mun, $hr, $mday, $mon, $yr, $wday, $yday, $isdist) = localtime(time);
  • return sprintf("%02d:%02d:%02d %02d/%02d/%04d", $hr, $min, $sec, $mon + 1, $mday, $yr + 1900);
  • }
  • sub hyp_log {
  • open HALOG, ">>$hlog_file";
  • printf HALOG "%s: %s\n", make_my_time(), @_;
  • close HALOG;
  • }
  • sub wide_msg {
  • my $text = join(' ', @_);
  • my @channels = IRC::channel_list();
  • while (@channels) {
  • $nick = pop(@channels);
  • $serv = pop(@channels);
  • $chan = pop(@channels);
  • $es = IRC::get_info(3);
  • $deb = substr($chan, 0, 1);
  • IRC::send_raw "PRIVMSG $chan :$text\n";
  • if ($deb eq "#") {
  • IRC::command_with_server(sprint_f("/notice %s %s %s", $chan, $nick, $text), $serv);
  • }
  • }
  • }
  • sub join_handler {
  • $line = join(' ', @_);
  • $line =~ s/\s+/ /g;
  • @ar = split ' ', $line;
  • }
  • sub privmsg_handler
  • {
  • if ($haway == 0) {
  • return 0;
  • }
  • my $line = shift(@_);
  • my $n = IRC::get_info(1);
  • $line =~ /:(.*)!(.*@.*) .*:(.*)/;
  • my $u= $1;
  • my $l= $2;
  • my $m= $3;
  • $n.= "\$";
  • if($l =~ / $n/) {
  • hyp_log "[$u] $m";
  • IRC::send_raw "PRIVMSG $u : Je suis absent ($hreason) mais vos messages en privé seront enregistrés.\n";
  • return 1;
  • }
  • return 0;
  • }
  • sub goaway_handler
  • {
  • $hreason = shift(@_);
  • if ($haway == 1) {
  • IRC::print "\002\0034:: VOUS ETES DEJA ABSENT ::\n";
  • return 1;
  • }
  • hyp_log "-- ABSENCE --";
  • IRC::print "\002\0034:: PASSAGE EN ABSENCE ::\n";
  • if(!$hreason) {
  • $hreason = $hdefreason;
  • }
  • wide_msg "s'absente ($hreason) mais vos messages en privé seront enregistrés.";
  • $hold_nick = IRC::get_info(1);
  • @servers = IRC::server_list();
  • foreach (@servers) {
  • IRC::command_with_server(sprintf("/nick %s%s", $hold_nick, $haway_nick), "$_");
  • }
  • $haway = 1;
  • return 1;
  • }
  • sub comeback_handler
  • {
  • if($haway == 0) {
  • IRC::print "\002\0034:: VOUS N'ETES PAS ABSENT ::\n";
  • return 1;
  • }
  • IRC::print "\002\0034:: RETOUR DE VOTRE ABSENCE ::\n";
  • @servers = IRC::server_list();
  • foreach (@servers) {
  • IRC::command_with_server(sprintf("/nick %s", $hold_nick), "$_");
  • }
  • $haway = 0;
  • wide_msg "est de retour!";
  • hyp_log "-- RETOUR --";
  • return 1;
  • }
  • sub vlog_handler {
  • IRC::print "\n\002\0034:: MESSAGES EN ABSENCE ::\n";
  • open HVLOG, "<$hlog_file";
  • while(<HVLOG>) {
  • IRC::print $_;
  • }
  • close HVLOG;
  • IRC::print "\002\0034:: FIN DES MESSAGES ::\n\n";
  • if($hautoclear == 1) {
  • clog_handler;
  • }
  • return 1;
  • }
  • sub clog_handler {
  • open HVLOG, ">$hlog_file";
  • close HVLOG;
  • IRC::print "\002\0034:: LES MESSAGES EN ABSENCE ONT ETE SUPPRIMES ::\003\n";
  • return 1;
  • }
#!/usr/bin/perl -w
# Away Script pour x-chat basé sur le script Hyperion
# Version 1.0 du 14/07/2005

###############################################################################################"
# CONFIGURATION
###############################################################################################"

# chemin du fichier conservant les logs
$hlog_file = "~/.hyperion.awaylog";

# complément du pseudo à utiliser lors du passage en absence
$haway_nick = "[away]";

# raison par defaut de l'absence
$hdefreason = "parti, donc plus la c'est à dire absent !";

# effacer les logs apres les avoir lus
$hautoclear = 1;

###############################################################################################"

sub make_my_time;
sub hyp_log;
sub wide_msg;
sub join_handler;
sub privmsg_handler;
sub goaway_handler;
sub comeback_handler;
sub vlog_handler;
sub clog_handler;

$hreason=$hdefreason;

IRC::register("Away", "1.00", "", "");

IRC::print "\002\0034:: Chargement du script: Away v1.0 ::\n";

IRC::add_command_handler("away", "goaway_handler");
IRC::add_command_handler("back", "comeback_handler");
IRC::add_command_handler("vlog", "vlog_handler");
IRC::add_command_handler("clog", "clog_handler");

IRC::add_message_handler("PRIVMSG", "privmsg_handler");
IRC::add_print_handler("Join", "join_handler");

IRC::print "\002\0034Away - Les commandes\n\n";
IRC::print "\002\0033/away [raison]      -- Se mettre absent\n";
IRC::print "\002\0033/back               -- Etre de retour\n";
IRC::print "\002\0033/vlog               -- Voir les logs\n";
IRC::print "\002\0033/clog               -- Effacer les logs\n";

sub make_my_time {
	($sec, $mun, $hr, $mday, $mon, $yr, $wday, $yday, $isdist) = localtime(time);
	return sprintf("%02d:%02d:%02d %02d/%02d/%04d", $hr, $min, $sec, $mon + 1, $mday, $yr + 1900);
}

sub hyp_log {
	open HALOG, ">>$hlog_file";
	printf HALOG "%s: %s\n", make_my_time(), @_;
	close HALOG;
}

sub wide_msg {
	my $text = join(' ', @_);
	my @channels = IRC::channel_list();
	while (@channels) {
		$nick = pop(@channels);
		$serv = pop(@channels);
		$chan = pop(@channels);
		$es = IRC::get_info(3);
		$deb = substr($chan, 0, 1);
		IRC::send_raw "PRIVMSG $chan :$text\n";
		if ($deb eq "#") {
			IRC::command_with_server(sprint_f("/notice %s %s %s", $chan, $nick, $text), $serv);
		}
	}
}

sub join_handler {
	$line = join(' ', @_);
	$line =~ s/\s+/ /g;
	@ar = split ' ', $line;
}

sub privmsg_handler 
{
	if ($haway == 0) {
		return 0;
	}
	my $line = shift(@_);
	my $n = IRC::get_info(1);
	$line =~ /:(.*)!(.*@.*) .*:(.*)/;
	my $u= $1;
	my $l= $2;
	my $m= $3;
	$n.= "\$";
	if($l =~ / $n/) {
		hyp_log "[$u] $m";
		IRC::send_raw "PRIVMSG $u : Je suis absent ($hreason) mais vos messages en privé seront enregistrés.\n";
		return 1;
	}
	return 0;
}

sub goaway_handler
{
	$hreason = shift(@_);
	if ($haway == 1) {
		IRC::print "\002\0034:: VOUS ETES DEJA ABSENT ::\n";
		return 1;
	}
	hyp_log "-- ABSENCE --";
	IRC::print "\002\0034:: PASSAGE EN ABSENCE ::\n";
	if(!$hreason) {
		$hreason = $hdefreason;
	}
	wide_msg "s'absente ($hreason) mais vos messages en privé seront enregistrés.";
	$hold_nick = IRC::get_info(1);
	@servers = IRC::server_list();
	foreach (@servers) {
		IRC::command_with_server(sprintf("/nick %s%s", $hold_nick, $haway_nick), "$_");
	}
	$haway = 1;
	return 1;
}

sub comeback_handler
{
	if($haway == 0) {
		IRC::print "\002\0034:: VOUS N'ETES PAS ABSENT ::\n";
		return 1;
	}
	IRC::print "\002\0034:: RETOUR DE VOTRE ABSENCE ::\n";
	@servers = IRC::server_list();
	foreach (@servers) {
		IRC::command_with_server(sprintf("/nick %s", $hold_nick), "$_");
	}
	$haway = 0;
	wide_msg "est de retour!";
	hyp_log "-- RETOUR --";
	return 1;
}

sub vlog_handler {
	IRC::print "\n\002\0034:: MESSAGES EN ABSENCE ::\n";
	open HVLOG, "<$hlog_file";
	while(<HVLOG>) {
		IRC::print $_;
	}
	close HVLOG;
	IRC::print "\002\0034:: FIN DES MESSAGES ::\n\n";
	if($hautoclear == 1) {
		clog_handler;
	}
	return 1;
}

sub clog_handler {
	open HVLOG, ">$hlog_file";
	close HVLOG;
	IRC::print "\002\0034:: LES MESSAGES EN ABSENCE ONT ETE SUPPRIMES ::\003\n";
	return 1;
}

Commentaires et avis

signaler à un administrateur
Commentaire de tofu le 14/07/2005 19:28:39

sympa mais ce qui serait cool c'est de pouvoir intégrer des options, parce que là tout est faisable avec xchat d'origine à part le fait de log les msg que lorsqu'on est absent dans un log à part.

signaler à un administrateur
Commentaire de lumesh le 14/07/2005 20:29:33

oh la le perl je viens tt juste de voir ce que c :)
en fait ptit a ptit je vais ameliorer ce script et surtout faire qqc avec des fenetres (en utilisant GTK par contre).

signaler à un administrateur
Commentaire de tofu le 14/07/2005 23:14:42

Pour un début c'est déjà bien, perso à part planter/reboot xchat j'arrive pas à grd chose en perl :D

signaler à un administrateur
Commentaire de PaDa le 18/07/2005 18:34:28

sympa..
j'ai pas pu tester, j'ai pas Xchat sur ce pc, je le ferai prochainement..
J'ai qq questions cependant :
- pourquoi rester a l'ancienne lib IRC:: et pas la nouvelle lib Xchat:: (qui est encore développée, documentée, suivie..)
- GTK ? et sous windows ? :/// GTK "bave" avec ma version de Xchat perso lorsque le texte défile.. enfin j'ai testé ca y a qq mois, le salon défile, et la bordure de fenêtre inférieure finit par pourir tout l'écran.. :/
- ca ca me parait "dangereux", du moins ca peut poser souci :
my $n = IRC::get_info(1); #[...]
$n.= "\$";
if($l =~ / $n/) {
Tu n'échappes pas les potentiels meta chars dans le IRC::getinfo(1), cela dit je ne sais pas ce que représente ce truc, j'ai la flemme de vérif sur xchat.org ^^
Au cas ou, il existe une possibilité d'échappement "global" du texte dans une regex, par les metachars \Q...\E (ca évitera ptet des reconnaissances foireuses, a toi de juger si c'est utile, j'ai pas forcément bien pigé..)
- pas trop pigé la fonction join_handler
- pourquoi déclarer toutes tes sous-routines en haut, en plus de la déclaration effective ? c'est une question naïve..

signaler à un administrateur
Commentaire de lumesh le 19/07/2005 11:33:36

"Ce n'est pas une creation mais une adaptation de la fonction away du script hyperion." ...

en fait vois tu g surtout adapté le gros script de base à mes besoins.
De plus il deconnait grave donc g modifier en sorte que cela fonctionne ....

Le perl je n'y connai keudale, mais tt langage de script il est possible tres rapidement de modifier un code sans vraiment connaitre la synthaxe (au pire le net est la pr nous aider).

Petit a petit bon j'apprendrai le perl. Etant sous nux je pense qu'il est becessaire de le connairtre.

Suite ua prochain episode.

signaler à un administrateur
Commentaire de PaDa le 19/07/2005 12:06:03

okay no pb ;)

signaler à un administrateur
Commentaire de Sizlaa le 08/08/2005 00:23:05

Pour un début en Perl, je trouve ce code pas trop mal ^^.
Je n'ai pas grand chose a ajouter car PaDa a déjà tout dit ;|.
Pour passer a GTK il faut déjà avoir de bonnes bases en perl sinon tu seras vite déborder (c'est juste un conseil).
Enfin bon, c'est quand même "cool" qu'il y ait enfin un code source en perl
Ceci dit Bonne continuation
++

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

events pour xchat en perl [ par Jamu ] Salut a tous Je me suis mis au perl il y a peu de temps et ce que je voudrais fair c virer les evenements textuel d'origine de mon xchat pour me coder add_handler - Script Perl pour Xchat [ par advi ] Bonjour à tous,j'ai créé un script Perl pour Xchat. Il fonctionne parfaitement, j'ai juste un probleme.Je suis capable de déclencher mon script sur de recuperer l'host en perl (xchat) [ par aeled ] J'essaie de faire une commande en perl qui récupere l'host d'un user placé en parametre.en gros /host [nick] doit renvoyer un truc du style : *!*@xxx. Détecteur de clônes (xchat) [ par Nebula ] Bonsoir à tous,J'essaie de faire un plugin pour X-Chat qui détecterait les clônes (j'ose espérer qu'il n'y a pas que des mircistes ici ?). Pour ce fai aide pour Xchat [ par Jamu ] Salut a tousTournant et codant depuis 2 ans sur mIRC,j'ai Linux depuis peu et par consécant xchat sur lequelle je débuteJe voudrais juste savoir si q Separateur comande xchat [ par Jamu ] Salut a tous Je suis sous xchat depuis peu,tournant avant sous mirc le separateur pour s&#233;parer deux commandes sur une meme ligne etais | (comme v events sous xchat [ par Jamu ] Salut a tousEn fait je voudrais juste savoir comment fair sous xchat pour donner plusieurs sons a un meme evenements textuel du genre:(je vous le fait Il était away depuis 19min54s... [ par NicX ] Bonjour,comme l'indique le titre,je voudrais calculer la durée de mon absence..je sais plus trop ce qu'il faut utiliser,se serait sympa de me filer un pour chrono sur les away [ par FyLiPuSsE ] bonjour je vrourai savoir comment fais t on un chrono sur les away :-) Away sur plusieurs servers en meme tps [ par Jipem ] Bonjour,J'ai un probleme existentiel que je n'arrive pas a régler :(Dans mon systeme d'away je voudrais laisser le choix entre : "Se mettre away sur c


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.