Irssi script

Programovacie jazyky, rady, poradňa...
DjBass
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2068
Registrovaný: 24 máj 2008, 13:07
Bydlisko: Košice
Kontaktovať používateľa:

Irssi script

Príspevok od používateľa DjBass »

Zdravím, neviete niekto upraviť tento script aby nekickoval za slová, ktorých časť obsahuje nadávku uvedenú v scripte? Napr slovo pi*a kicklo ale opica nie.

Kód: Vybrať všetko

use Irssi 20020217; # Irssi 0.8.0
$VERSION = "1.1";
%IRSSI = (
    authors     =>  "Matti 'qvr' Hiljanen",
    contact     =>  "matti\@hiljanen.com",
    name        =>  "wkb",
    description =>  "A simple word kickbanner",
    license     =>  "Public Domain",
    url         =>  "http://matin.maapallo.org/softa/irssi",
);

use strict;
use Irssi;

my @channels =
  qw(#kanal);

my @words =
  qw(slovo slovo2 slovo3 slovo4 slovo5 slovo6 slovo7);

my @gods =
  qw(Dj_Bass);
  
sub sig_public {
    my ($server, $msg, $nick, $address, $target) = @_;

    return if $nick eq $server->{nick};

    $msg =~ s/[\000-\037]//g;
    my $rmsg = $msg;
    $msg = lc($msg);

    # bad word
    my $nono = 0;
    foreach (@words) { $nono = 1 if $msg =~ /$_/ }
    return unless $nono;
       
    # channel? 
    my $react = 0;
    foreach (@channels) { $react = 1 if lc($target) eq lc($_) }
    return unless $react;

    # god-like person?
    my $jumala = 0;
    foreach (@gods) { $jumala = 1 if lc($nick) =~ /$_/ }
    return if $jumala;
    
   

    $server->command("kick $target $nick Kick za nadavanie! :D");
    Irssi::print("Word kick: Kicking $nick from $target. (Povedal $rmsg)");
}

Irssi::signal_add_last('message public', 'sig_public');
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

pozri si ako sa v perle zapisuju regulárne, malo by to byť nejak takto:

Kód: Vybrať všetko

foreach (@words) { $nono = 1 if $msg =~ /[^a-z]$_[^a-z]/ } 
alebo rozbiť $msg do poľa po medzerách a porovnávať v cykle cez eq ale radšej skús takto

//autoeditácia príspevku ( 03 Jul 2009, 23:25 )
alebo namiesto [^a-z] môžeš skúsiť dať aj [^\w]
DjBass
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2068
Registrovaný: 24 máj 2008, 13:07
Bydlisko: Košice
Kontaktovať používateľa:

Príspevok od používateľa DjBass »

Teraz to kickne len vtedy, ak je pred nadávkoua za nadávkou nejaké slovo.

Keď je to takto, tak nekickne.
nadavka
Ani takto
nieco nadavka
Ani takto
nadavka nieco
Iba takto
nieco nadavka nieco
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

riadok

Kód: Vybrať všetko

$msg =~ s/[\000-\037]//g; 
ti odstráni všetky neviditelné znaky zo správy, teda aj znak určujúci začiatok a koniec. Tento riadok teda skús odstrániť, uprav to až v $rmsg aby si to mal v tej log správe vymazené:

Kód: Vybrať všetko

my $rmsg = $msg; 
$rmsg =~ s/[\000-\037]//g; 
$msg = lc($msg);
a spomínaný riadok čo som uvádzal vyššie daj takto

Kód: Vybrať všetko

foreach (@words) { $nono = 1 if $msg =~ /([\A]|[^a-z])$_([\Z]|[^a-z])/ }
ak to nepôjde, skús \A a \Z zameniť za \s
Napísať odpoveď