Programovacie jazyky, rady, poradňa...
DjBass
Darca
Príspevky: 2068 Registrovaný: 24 máj 2008, 13:07
Bydlisko: Košice
Kontaktovať používateľa:
Príspevok
od používateľa DjBass » 03 júl 2009, 23:13
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
Príspevky: 25958 Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:
Príspevok
od používateľa audiotrack » 03 júl 2009, 23:25
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
Príspevky: 2068 Registrovaný: 24 máj 2008, 13:07
Bydlisko: Košice
Kontaktovať používateľa:
Príspevok
od používateľa DjBass » 04 júl 2009, 0:23
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
Príspevky: 25958 Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:
Príspevok
od používateľa audiotrack » 04 júl 2009, 11:06
riadok
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