mIRC Home    About    Download    Register    News    Help

Print Thread
#102765 13/11/04 12:02 AM
Joined: Mar 2004
Posts: 359
L
Fjord artisan
OP Offline
Fjord artisan
L
Joined: Mar 2004
Posts: 359
I need a kicker where if someone is on a channel that matches words in a text file it will kick ban them.

#102766 13/11/04 03:28 AM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
Start -> Run -> wordpad -> paste code -> copy code to Scripts Editor, tab Remote (alt+r).

[*] /chans_list - Lists the bad channels.
[*] /chans_add <channel> - Adds a bad channel.
[*] /chans_rem <channel> - Removes a bad channel.

I've included a channel popup to:

- Enable/disable the script
- Add/remove a channel to the protection list

Code:
menu channel {
  Badchan Checker
  .$iif($group(#badchans) == off,$style(2)) $iif($istok(%protchans,#,32),Remove,Add) protection for #:{
    if $istok(%protchans,#,32) {
      %protchans = $remtok(%protchans,#,1,32)
      echo -ac info * Removed # from the list of protected channels
    }
    else {
      %protchans = %protchans #
      echo -ac info * Added # to the list of protected channels
    }
  }
  .$iif($group(#badchans) == on,Disable,Enable):{
    if $group(#badchans) == on) { disable #badchans | chans_save }
    else { enable #badchans | chans_load }
  }
}
[color:red]  [/color] 
#badchans on
on *!:JOIN:%protchans: .enable #chancheck | whois $nick 
on *:START: chans_load
on *:EXIT: chans_save
#badchans end
 [color:red]  [/color] 
#chancheck off
raw 318:*: haltdef | .disable #chancheck 
raw 319:*: haltdef | chans_check $2- 
raw *:*: if $istok(301 307 310 311 312 313 317 320 401,$numeric,32) { haltdef }
#chancheck end
 [color:red]  [/color] 
alias chans_noprefix var %a, %b = $regsub($1-,/(?:^|\s)([^#]+)/g,$chr(32),%a) | return %a
 [color:red]  [/color] 
alias chans_check {
  var %chans = $chans_noprefix($2-), %a = 1
  while $gettok(%chans,%a,32) {
    if $hget(chans,$v1) { chans_comkick $1 | return }
    inc %a
  }
}
 [color:red]  [/color] 
alias chans_comkick {
  var %a = $comchan($1,0), %b
  while $comchan($1,%a) {
    %b = $v1
    if $istok(%protchans,%b,32) &amp;&amp; $me isop %b &amp;&amp; $1 !isop %b {
      ban -k %b $1 2 You are on a forbidden channel. 
    }
    dec %a
  }
}
 [color:red]  [/color] 
alias chans_load {
  if !$isfile(chans.txt) {
    echo -asc info * Could not find chans.txt. Creating new file...Done.
    write chans.txt
  }
  hmake chans
  hload chans chans.txt
}
 [color:red]  [/color] 
alias chans_save hsave chans chans.txt | hfree chans
 [color:red]  [/color] 
alias chans_add {
  hadd chans $$1 1 
  echo -ac info * Added $1 to list of bad channels
}
 [color:red]  [/color] 
alias chans_rem {
  hdel chans $$1 
  echo -ac info * Deleted $1 from list of bad channels 
}
 [color:red]  [/color] 
alias chans_list {
  var %a = 1
  echo -asc info ### Listing bad channels ###
  while $hget(chans,%a).item { 
    echo -as * $v1
    inc %a
  }
}

[*] You probably already have a text file with all the bad channels in it, each on a seperate line. We'll have to convert it to make it work with the script. Add these 2 aliases, put your text file in the mircdir, change "yourfile.txt" to the actual name in the alias chans_convert, close the mIRC editor, and type /chans_convert

alias chans_convert filter -fk yourfile.txt chans_convert2
alias -l chans_convert2 write chans.txt $+($1,$lf,1)

[*] The script will only scan on channels that are in the protected list (%protchans), and while performing the comchan kick, it will also only kick from common channels who are in %protchan. I added this option because it is possible that you are an op in a channel, where they do not want to use a bad channel kicker.

Enjoy.

#102767 13/11/04 04:40 AM
Joined: Mar 2004
Posts: 359
L
Fjord artisan
OP Offline
Fjord artisan
L
Joined: Mar 2004
Posts: 359
I don't have a previous text file of channels, and I can't get it to work. I've typed /chans_add #test to see if it would work (it was enabled)..didn't get any error, yet no kick/ban

EDIT: I also tried on a seperate client.

Last edited by LostServ; 13/11/04 04:43 AM.
#102768 13/11/04 04:43 AM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
Did you restart your mIRC before trying that? Because, as you can see, the hash table has to be created and everything in the on start event.

So to start the script, type /chans_load, or restart your mIRC.

Also, did you add the channel to %protchans with the channel popup? Right click in a channel where you want the script to scan on join, and then test it.

Also, don't forget, it will not kick a user that is an op, so if you are using your clone that gets oped or something, the script won't kick it.

I've tested the script, prior to posting it, so it should work. Btw I used the operator $v1, so this will only work in mIRC 6.16, don't know if you're aware.

Gonna go to bed now, its almost 6 am and I'm getting tired :P

Greets

EDIT: I've changed it so that if you enable/disable the script through the channel popup, that it will also load/unload the channels immediately, rather than through the on start/exit events. So you ought to recopy the whole script, as I've altered the chans_save alias as well.


Gone.
#102769 13/11/04 05:27 AM
Joined: Mar 2004
Posts: 359
L
Fjord artisan
OP Offline
Fjord artisan
L
Joined: Mar 2004
Posts: 359
Thanks, working good.

What if I wanted it to do the kickban where if a user joins and they are on a channel that has the word sex in it?

Last edited by LostServ; 13/11/04 05:30 AM.
#102770 13/11/04 03:44 PM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
Hi,

that's possible, if you just change the following in the alias chans_check:

if $hget(chans,$v1) { ...

to

if $hfind(chans,$v1,1,W) { ...

And then simply add wildcarded strings to the hash table, using /chans_add.

Examples:

/chans_add *sex* --> match with "sex" in any position of the channel name
/chans_add *lol --> match with "lol" at the end of the channel name
/chans_add #lame* --> match any channel that starts with #lame in its name
/chans_add #xteensx -> match the channel named #xteensx
/chans_add #123? -> match the channel named #123 followed by any character
...

Enjoy.


Gone.
#102771 13/11/04 03:51 PM
Joined: Mar 2004
Posts: 359
L
Fjord artisan
OP Offline
Fjord artisan
L
Joined: Mar 2004
Posts: 359
Working great, thanks! laugh

#102772 13/11/04 04:02 PM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
Most welcome!


Gone.
#102773 10/01/05 02:01 PM
Joined: Jan 2005
Posts: 1
T
Mostly harmless
Offline
Mostly harmless
T
Joined: Jan 2005
Posts: 1
hi .. i 'm new to mIRC scripting; i installed your code in mIRC 6.16 and its dropdown options ('Add ..channel to list' and 'Disable' appear, and all indications are that its running. I had made your modif to 'search' for strings within channel names, btw.

When activated for a channel, 'whois' is shown automaticlly upon each join, but immediately returns the last line in the following 4 lines of a sample 'whois' text:

••• <nick> is <whoever>
••• <nick> on EfNet.org
••• <nick> on #mircscripts
••• ········································
••• Server does not recognize IF command


( The " IF " in the error line 4 above is actually preceded by
the square 'box' character (dont have an ansi chart, sorry!)

The commands " chans_list , chans_add , " etc, DO seem to work, yet no user entering the channel with a whois contianing
a 'bad chan' string is ever kicked .... the only response seems to be the above 4th line of the 'whois' .

I have another script loaded ( PnP ) which likes to be 'first' in the order of script loading, and i've placed your code at alternate locations , with no effect. Could i have inadvertently mistyped something in your code?

I must note that the series of communications re: your code here includes a comment you made where you suggested 're-copying' your code, a consequence of your having fixed a prob or two ..yet there's no ref about from where to copy. Where is the latest code to be found?

thanks so much for putting this together .. if/when it works for me it'll be a great advantage: ive searched everywhere for any code that'd do what yours is intended to do and am very grateful for your work ..thank you!

tkjtkj

#102774 12/01/05 06:56 AM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
Hi,

I had an offday when I posted this code, there was actually later on another thread about another person who had copied it and had some issues. Then i added some changes to make it better, and now you can copy the final version.

Try to copy paste exactly as you see here, and put it in a brand new remote file. You are running PnP? I think PnP is not compatible with 6.16 though, so that can definitely give errors. What you are getting is not because of the code, no one including myself whotested it had those errors afaik.

If it still doesnt work, then try to test it on a fresh clean 6.16, with no other scripts loaded, see what that does.

In order to copy paste go to Start -> Run -> type "wordpad" without the quotes, paste the code there, then copy the code from there to -> mIRC Scripts Editor -> alt+r -> Remote, new remote file.

You have probably already added some channels to the protection list by right clicking a channel and adding them. In the original script I made an error there, so you are going to have to do the following:

In the mirc where you load the code, if you've already added channels, then in the command line type:

//set %protchans $replace(%protchans,$chr(32),$chr(44))

This will replace the spaces in %protchans between channel names to commas, so that all channels will match properly on the on join event.

If there are more problems to get it working, let me know. For completeness' sake, again an overview of the features of the script:


  • /chans_list - Lists the bad channels.
  • /chans_add <channel> - Adds a bad channel.

    You can add wildcarded strings (although you don't have to) to the hash table with this command.

    Examples:

    /chans_add *sex* --> match with "sex" in any position of the channel name
    /chans_add *lol --> match with "lol" at the end of the channel name
    /chans_add #lame* --> match any channel that starts with #lame in its name
    /chans_add #xteensx -> match the channel named #xteensx
    /chans_add #123? -> match the channel named #123 followed by any character
  • /chans_rem <channel> - Removes a bad channel.
  • Script is off when you load it. To enable it: right click a channel.
  • Script only works on channels that you have added to the "Protection" list, by right clicking the channel you want to protect, and add it.

Code:
menu channel { 
  -
  Badchan Checker 
  .$iif($group(#badchans) == off,$style(2)) $iif($istok(%protchans,#,44),Remove,Add) protection for #:{ 
    if $istok(%protchans,#,44) { 
      %protchans = $remtok(%protchans,#,1,44) 
      echo -ac info * Removed # from the list of protected channels 
    } 
    else { 
      %protchans = $addtok(%protchans,#,44) 
      echo -ac info * Added # to the list of protected channels 
    } 
  } 
  .-
  .$iif($group(#badchans) == on,Disable,Enable):{ 
    if $group(#badchans) == on { .disable #badchans | chans_unload } 
    else { .enable #badchans | chans_load  } 
  } 
} 
 [color:red]  [/color] 
#badchans off
on @*:JOIN:%protchans:{
  hinc -mu2 chancheck $+($cid,#)
  if $hget(chancheck,$+($cid,#)) &lt; 5 {
    hadd chancheck $nick 1 
    .enable #chancheck 
    whois $nick 
  }
}
on *:START: chans_load 
on *:EXIT: chans_unload
#badchans end 
 [color:red]  [/color] 
#chancheck off
raw 318:*:{
  if $hget(chancheck,$2) {
    haltdef
    hdel chancheck $2
    if !$hget(chancheck,0).item { .disable #chancheck }
  }
}
raw 319:*: if $hget(chancheck,$2) { haltdef | chans_check $2-  }
raw *:*: if $hget(chancheck,$2) &amp;&amp; $istok(301 307 310 311 312 313 317 320 330,$numeric,32) { haltdef } 
#chancheck end
 [color:red]  [/color] 
alias chans_noprefix var %a, %b = $regsub($1-,/(?:^|\s)([^#]+)/g,$chr(32),%a) | return %a 
 [color:red]  [/color] 
alias chans_check { 
  var %chans = $chans_noprefix($2-), %a = 1 
  while $gettok(%chans,%a,32) { 
    if $hfind(chans,$v1,1,W) { chans_comkick $1 | return } 
    inc %a 
  } 
} 
 [color:red]  [/color] 
alias chans_comkick { 
  var %a = $comchan($1,0), %b 
  while $comchan($1,%a) { 
    %b = $v1 
    if $istok(%protchans,%b,44) &amp;&amp; $me isop %b &amp;&amp; $1 !isop %b { 
      ban -k %b $1 2 You are on a forbidden channel. 
    } 
    dec %a 
  } 
} 
 [color:red]  [/color] 
alias chans_load { 
  if !$isfile(chans.txt) { 
    echo -asc info * Could not find chans.txt. Creating new file...Done. 
    write chans.txt 
  } 
  hmake chans 
  hload chans chans.txt 
  echo -ac info Bad channel kicker loaded.
} 
 [color:red]  [/color] 
alias chans_unload {
  chans_save
  if $hget(chancheck) { hfree chancheck }
  hfree chans
  echo -ac info Bad channel kicker unloaded.
}
 [color:red]  [/color] 
alias chans_save hsave -o chans chans.txt 
 [color:red]  [/color] 
alias chans_add { 
  hadd chans $$1 1 
  chans_save
  echo -ac info * Added $1 to list of bad channels 
} 
 [color:red]  [/color] 
alias chans_rem { 
  hdel chans $$1 
  chans_save
  echo -ac info * Deleted $1 from list of bad channels 
} 
 [color:red]  [/color] 
alias chans_list { 
  var %a = 1 
  echo -asc info ### Listing bad channels ### 
  while $hget(chans,%a).item { 
    echo -as * $v1 
    inc %a 
  } 
}


Gone.
#102775 27/01/05 09:54 PM
Joined: Feb 2004
Posts: 2,019
Hoopy frood
Offline
Hoopy frood
Joined: Feb 2004
Posts: 2,019
I could simplify that regsub a bit like this:

alias chans_noprefix var %a, %b = $regsub($1-,/(?<=^|\s)[^#]+/g,,%a) | return %a


Gone.
#102776 29/09/06 02:00 AM
Joined: Sep 2006
Posts: 1
J
Mostly harmless
Offline
Mostly harmless
J
Joined: Sep 2006
Posts: 1
Hello!!

your script working good. but I need more some scan for bad chan and match or support with your this script.

Now we can kick user whois come from bad channel. But after they join 1 or 2 minute they join to bad chan So how we can scan them automatic and kick.


Link Copied to Clipboard