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 08/02/2008, à 02:17

Yannick_LM

Script pour Irssi

Bon, voilà. Un petit script inutile qui vous permet de savoir (à peu près) où habitent les gens avec qui vous parlez et l'heure qu'il est chez eux.

Edit : le script qui suit est parfaitement inutile, et peut être avantageusement remplacé par
/ctcp <pseudo> time, néanmoins, il fut amusant à écrire.


# Print the country name and the local time in /WHOIS replies
# Based on : country.pl by Timo Sirainen

# This script uses the IP-to-Country Database
# provided by WebHosting.Info (http://www.webhosting.info),
# available from http://ip-to-country.webhosting.info.


# Install :
#     1. Get the latest ip-to-country database at :
#     http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
#     and put it in ~/.irssi/scripts
#     2. Make a backup of your config files.
#     3. type (for instance):
#     /format whois {nick $0} {nickhost $1@$2}%:{whois country  $whois_country}%:{whois local $whois_local_time}%:{whois ircname $3}
#    4. Save the changes with /save

# Enjoy !

use strict;
use Irssi ;
use LWP::UserAgent;
use Socket;


use vars qw($VERSION %IRSSI);
$VERSION = "1.0.1";
%IRSSI = (
        authors         => "Yannick_LM",
        contact         => "yannicklm1337\@gmail.com",
        name            => "whois_local_time",
        description     => "Print the country name and the local time in /WHOIS replies",
        license         => "Public Domain",
        changed         => "Feb 8 2008"
        );


our $HOME_DIR = $ENV{HOME};
our $GEOFILE = "$HOME_DIR/.irssi/scripts/ip-to-country.csv";
our $URL="http://www.worldtimeserver.com/";

our $time = "";
our $country ="";


# The last version of the file can be obtained there:
# http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip

# Convert IP to number for use in the ip-to-country database.
sub ip_to_number {
    my $ip = shift;
    my (@octets, $ip_num);
    $ip =~ s/\n//g;
    @octets = split /\./, $ip;
    $ip_num = 0;
    foreach (@octets) {
        $ip_num <<= 8;
        $ip_num |= $_;
    }
    return $ip_num;
}

# Find the country name and code in the database
sub find_country {   
    my $ip=shift;
    $ip = &ip_to_number($ip);
    open GF, "<$GEOFILE" or die "Can't open $GEOFILE $!";
    while (<GF>){
        $_ =~ s/"//g;
        $_ =~ s/\n//;
        my ($start, $end, $CC, $CTRY);
        ($start, $end, $CC, $CTRY, $country) = split /,/, $_;
        if (($ip >= $start) and ($ip <= $end)){
            return "$CC";
            last;
        }
    }
    close GF;
    die "Country no found in database";
}



sub find_time {
    my $CC=shift;

# Queries worltimeserver.com
    my $ua = new LWP::UserAgent;
    $ua->agent("AgentName/0.1 " . $ua->agent);
    my $req = new HTTP::Request GET => "$URL/current_time_in_$CC.aspx";
    my $res = $ua->request($req);
    my $content = $res->content;
    my @lines = split("\n", $content);

# Parses the result
    foreach(@lines) {
        if ( $_ =~ /\s+(\d\d?:\d\d (A|P)M)/ ) {
            return $1;
        }
    }
}


# Redirect whois signal
sub sig_whois {
    my ($server, $data, $nick, $host) = @_;
    my ($me, $nick, $user, $host) = split(" ", $data);
    $host =~ s/^.*\@//;

    eval {
	
	# if it's a cloack, there is a slash in the host 
	if ($host =~ m,/,) {
	    die "$host is a cloak";
	}
	else {
	    # Else, find the IP adress
	    my $packed_ip = gethostbyname("$host");
	    defined $packed_ip or die "gethostbyname failed :(";
	    my $ip = inet_ntoa($packed_ip);
	    
           # Find coutry and time
	    my $CC = &find_country($ip);
	    $time = &find_time($CC);

	    
	}
    };

    if ($@) {
	# Irssi::active_win->print("Error : $@"); # Debug > merci de décommenter ceci si vous avez des problèmes
        $country="Not Found";
        $time="Unknown";
    }
}

# For use in the /format ligne
sub expando_whois_local_time {
    return $time;
}

sub expando_whois_country {
    return $country;
}


Irssi::signal_add_first('event 311', \&sig_whois);

Irssi::expando_create('whois_local_time', \&expando_whois_local_time,
        { 'event 311' => 'None' } );

Irssi::expando_create('whois_country', \&expando_whois_country,
        { 'event 311' => 'None' } );

Pour les non-anglophones :
1. Sauvegardez le fichier dans .irssi/scripts/autorun/whois_local_time.pl
2. téléchargez la base de données ip-to-country http://ip-to-country.webhosting.info/do … ry.csv.zip, et extrayez-la  dans .irssi/scripts
3. Sauvegardez vos fichiers de configuration
4. Tapez : /format whois {nick $0} {nickhost $1@$2}%:{whois country  $whois_country}%:{whois local $whois_local_time}%:{whois ircname $3}
5. Tapez /save


Retours, remarques, suggestions bienvenues.

Dernière modification par Yannick_LM (Le 17/04/2008, à 23:39)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#2 Le 11/02/2008, à 22:58

Yannick_LM

Re : Script pour Irssi

up neutral


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#3 Le 23/03/2008, à 00:48

Thomicide

Re : Script pour Irssi

Je l'ai mis, apparemment ça marche bien.
Mais il faut redemarrer irssi pour que ça fonctionne.

Merci!

Hors ligne

#4 Le 23/03/2008, à 04:36

Yannick_LM

Re : Script pour Irssi

Mon Dieu, un utilisateur !

Bon, c'est pas encore parfait, hein. (Y a des problèmes de durée d'éxécution, qui pourrait facilement être réduite, et de gestion des cloaks).

<blague>
Maintenant que j'ai dit ça, j'vais être obligé de le faire en plus. J'aurais mieux fait de fermer ma grande g*ule
</blague>

Content que ça t'intéresse, Thomicide cool


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#5 Le 23/03/2008, à 14:19

Thomicide

Re : Script pour Irssi

Ben j'essayerais la suite aussi ! Depeche toi!

Hors ligne

#6 Le 23/03/2008, à 19:11

Yannick_LM

Re : Script pour Irssi

Bon, pour les cloaks, c'est fait.
Pour la vitesse d'exécution, j'avais pensé à quelque chose, mais c'était une fausse bonne idée roll

Quoiqu'il en soit, si le problème vous intéresse, jetez un œil...

Premier message édité.

EDIT2:
Utilisation de gethostbyname au lieu d'un shell->ping(), ce qui est plus propre. cool
(et potentiellement portable sous windows)

Dernière modification par Yannick_LM (Le 23/03/2008, à 21:23)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#7 Le 24/03/2008, à 16:29

Thomicide

Re : Script pour Irssi

Euh, tu as modifié le premier post? ou tu as oublié de poster le nouveau code?

Pour les cloak c'est cool si ça fonctionne! J'attendais ça justement!


edit: J'ai essayé le code du premier post, pour les cloaks, il ne met met rien dans Country ni dans Local.
Donc, a moins que j'ai foiré un truc, ça fonctionne pas.

Dernière modification par Thomicide (Le 24/03/2008, à 16:34)

Hors ligne

#8 Le 24/03/2008, à 16:45

Yannick_LM

Re : Script pour Irssi

Alors, oui, j'ai modifié le code du premier post.

Et oui, tout le script tourne autour du nom de domaine que répond le whois.
Si le whois te donne un cloak, tu n'as pas de  nom de domaine, donc pas d'information exploitable pour essayer de deviner où vit celui qui écrit.
Mais au moins, il y a plus de message d'erreur idiot wink


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#9 Le 25/03/2008, à 02:04

Thomicide

Re : Script pour Irssi

Oui, j'ai remarqué pour le Message d'erreur.
En tout cas je trouve que c'est du bon travail.

C'est ton premier script? Moi j'essaye de faire un script pour ecrire dans une couleur donnée, mais, j'y arrive pas pour l'instant.

Hors ligne

#10 Le 26/03/2008, à 11:41

Emralegna

Re : Script pour Irssi

Salut,

J'ai voulu utiliser ce script pour le tester, mais je suis passé sous Weechat qui m'a l'air davantage à jour, entre temps...

Dernière modification par Emralegna (Le 26/03/2008, à 11:44)

Hors ligne

#11 Le 26/03/2008, à 15:00

Yannick_LM

Re : Script pour Irssi

Je vois aucune raison pour laquelle ce script fonctionnerait sous weechat roll

Cela dit, maintenant que t'as l'algorithme, rien ne t'empêches de faire la même chose dans le langage de ton choix, en plus wink

EDIT : en fait, non. J'ai vu nulle part comment customiser le whois sur weechat, désolé tongue

Dernière modification par Yannick_LM (Le 26/03/2008, à 15:15)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#12 Le 26/03/2008, à 15:30

Emralegna

Re : Script pour Irssi

Yannick_LM a écrit :

Je vois aucune raison pour laquelle ce script fonctionnerait sous weechat roll
[...]

Et bien, justement moi aussi je n'en voyais aucune. tongue

Comme tu l'as précisé par la suite il n'y a pas de gestionnaire de thème par défaut, il faut un script. En revanche j'ignorai qu'il n'était pas du tout possible d'éditer les whois ; j'avoue ne pas m'être encore penché sur la personnalisation. wink

J'aurais effectivement pu modifier le code pour qu'il aille bien à Weechat, si au préalable je savais comment. wink
Je me pencherai sur la question quand j'aurais davantage de temps, et pourquoi pas par la suite y poster quelques autres scripts, dans un avenir lointain. wink

Hors ligne

#13 Le 27/03/2008, à 02:34

Thomicide

Re : Script pour Irssi

Avec ton nouveau script, j'obtiens une erreur:

-!- Irssi: Error in script whois_local_time:
Global symbol "$ip" requires explicit package name at (eval 61) line 134.

Je ne sais pas la résoudre.

Hors ligne

#14 Le 27/03/2008, à 02:43

Yannick_LM

Re : Script pour Irssi

Voilà, corrigé


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#15 Le 28/03/2008, à 00:44

Thomicide

Re : Script pour Irssi

Et bien maintenant, j'ai une autre erreur!
Lorsque je fais un /whois, j'ai:

Can't exec "inet_ntoa": Aucun fichier ou répertoire de ce type at (eval 84) line 62.

Hors ligne

#16 Le 28/03/2008, à 01:53

Yannick_LM

Re : Script pour Irssi

Hum.
à mon avis il te manque le paquet libwww-perl


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#17 Le 28/03/2008, à 22:04

Thomicide

Re : Script pour Irssi

Je l'ai , si.

Hors ligne

#18 Le 28/03/2008, à 23:34

Yannick_LM

Re : Script pour Irssi

bon, autant pour moi.
J'ai pas modifié le script correctement, mea culpa.
(Il manquait le use Socket; désolé)
Premier message édité


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#19 Le 05/04/2008, à 03:56

Thomicide

Re : Script pour Irssi

Petite chose, au cas où.

/whois sur un cloak ne donne pas l'heure local, hors en faisant un ctcp sur un cloak, on l'a.
Saurais-tu par hasard, faire apparaitre l'heure dans le whois ?
Il parait que c'est possible, mais je ne sais pas comment.

Par contre, le temps entre /whois et le résultat sera plus long.


Voila, au cas où ça t'interesse.

Hors ligne

#20 Le 05/04/2008, à 18:23

Yannick_LM

Re : Script pour Irssi

Arg !

Bon, tant pis. Joli exemple de la façon de réinventer la roue...

/ctcp <pseudo> time suffit amplement, et est bien plus rapide ...

Bon ben vous pouvez oublier le script, il ne sert à rien


EDIT : bon, je vais quand même refaire un script qui utilisera ctcp, parce que c'est vous

Dernière modification par Yannick_LM (Le 05/04/2008, à 18:31)


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#21 Le 06/04/2008, à 01:10

Thomicide

Re : Script pour Irssi

Je ne sais pas si c'est une bonne idée le script qui utilise le ctcp.
Le whois va être long.

Et ton script Donne le pays, LUI.
Donc il est bien, moi perso je le garde sans le ctcp.

Hors ligne

#22 Le 06/04/2008, à 01:47

Yannick_LM

Re : Script pour Irssi

smile


Trucs et astuces pour Vim
Ma web page  avec des trucs dessus ...

Hors ligne

#23 Le 06/04/2008, à 13:10

Emralegna

Re : Script pour Irssi

Pesonnellement j'ignore la plupart des CTCPs si ça n'est pas tous, dont le TIME, donc sans ce protocol il reste bien utile. smile

Hors ligne

#24 Le 08/04/2008, à 00:50

Thomicide

Re : Script pour Irssi

T'as vu ça Yannick_LM, on est 2 sur le coup!:cool:

Hors ligne