mIRC

Home About Download Register Community Help

Page 1 of 1 1
Topic Options
#102765 - 13/11/04 01:02 AM Whois(Channel) Kicker..
LostServ
enthusiast


Registered: 21/03/04
Posts: 371
Loc: USA
I need a kicker where if someone is on a channel that matches words in a text file it will kick ban them.
_________________________
Make it idiot-proof, and they'll make a better idiot.

Top
#102766 - 13/11/04 04:28 AM Re: Whois(Channel) Kicker..
FiberOPtics
Pooh-Bah


Registered: 05/02/04
Posts: 2128
Loc: Leuven, Belgium
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 }
    }
    }

    #badchans on
    on *!:JOIN:%protchans: .enable #chancheck | whois $nick
    on *:START: chans_load
    on *:EXIT: chans_save
    #badchans end

    #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

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

    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
    }
    }

    alias chans_comkick {
    var %a = $comchan($1,0), %b
    while $comchan($1,%a) {
    %b = $v1
    if $istok(%protchans,%b,32) && $me isop %b && $1 !isop %b {
    ban -k %b $1 2 You are on a forbidden channel.
    }
    dec %a
    }
    }

    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
    }

    alias chans_save hsave chans chans.txt | hfree chans

    alias chans_add {
    hadd chans $$1 1
    echo -ac info * Added $1 to list of bad channels
    }

    alias chans_rem {
    hdel chans $$1
    echo -ac info * Deleted $1 from list of bad channels
    }

    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.

  • Top
    #102767 - 13/11/04 05:40 AM Re: Whois(Channel) Kicker..
    LostServ
    enthusiast


    Registered: 21/03/04
    Posts: 371
    Loc: USA
    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.


    Edited by LostServ (13/11/04 05:43 AM)
    _________________________
    Make it idiot-proof, and they'll make a better idiot.

    Top
    #102768 - 13/11/04 05:43 AM Re: Whois(Channel) Kicker..
    FiberOPtics
    Pooh-Bah


    Registered: 05/02/04
    Posts: 2128
    Loc: Leuven, Belgium
    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.

    Top
    #102769 - 13/11/04 06:27 AM Re: Whois(Channel) Kicker..
    LostServ
    enthusiast


    Registered: 21/03/04
    Posts: 371
    Loc: USA
    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?


    Edited by LostServ (13/11/04 06:30 AM)

    Top
    #102770 - 13/11/04 04:44 PM Re: Whois(Channel) Kicker..
    FiberOPtics
    Pooh-Bah


    Registered: 05/02/04
    Posts: 2128
    Loc: Leuven, Belgium
    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.

    Top
    #102771 - 13/11/04 04:51 PM Re: Whois(Channel) Kicker..
    LostServ
    enthusiast


    Registered: 21/03/04
    Posts: 371
    Loc: USA
    Working great, thanks!
    _________________________
    Make it idiot-proof, and they'll make a better idiot.

    Top
    #102772 - 13/11/04 05:02 PM Re: Whois(Channel) Kicker..
    FiberOPtics
    Pooh-Bah


    Registered: 05/02/04
    Posts: 2128
    Loc: Leuven, Belgium
    Most welcome!
    _________________________
    Gone.

    Top
    #102773 - 10/01/05 03:01 PM Re: Whois(Channel) Kicker..
    tkjtkj
    newbie


    Registered: 10/01/05
    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

    Top
    #102774 - 12/01/05 07:56 AM Re: Whois(Channel) Kicker..
    FiberOPtics
    Pooh-Bah


    Registered: 05/02/04
    Posts: 2128
    Loc: Leuven, Belgium
    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 }
    }
    }

    #badchans off
    on @*:JOIN:%protchans:{
    hinc -mu2 chancheck $+($cid,#)
    if $hget(chancheck,$+($cid,#)) < 5 {
    hadd chancheck $nick 1
    .enable #chancheck
    whois $nick
    }
    }
    on *:START: chans_load
    on *:EXIT: chans_unload
    #badchans end

    #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) && $istok(301 307 310 311 312 313 317 320 330,$numeric,32) { haltdef }
    #chancheck end

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

    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
    }
    }

    alias chans_comkick {
    var %a = $comchan($1,0), %b
    while $comchan($1,%a) {
    %b = $v1
    if $istok(%protchans,%b,44) && $me isop %b && $1 !isop %b {
    ban -k %b $1 2 You are on a forbidden channel.
    }
    dec %a
    }
    }

    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.
    }

    alias chans_unload {
    chans_save
    if $hget(chancheck) { hfree chancheck }
    hfree chans
    echo -ac info Bad channel kicker unloaded.
    }

    alias chans_save hsave -o chans chans.txt

    alias chans_add {
    hadd chans $$1 1
    chans_save
    echo -ac info * Added $1 to list of bad channels
    }

    alias chans_rem {
    hdel chans $$1
    chans_save
    echo -ac info * Deleted $1 from list of bad channels
    }

    alias chans_list {
    var %a = 1
    echo -asc info ### Listing bad channels ###
    while $hget(chans,%a).item {
    echo -as * $v1
    inc %a
    }
    }

    _________________________
    Gone.

    Top
    #102775 - 27/01/05 10:54 PM Re: Whois(Channel) Kicker..
    FiberOPtics
    Pooh-Bah


    Registered: 05/02/04
    Posts: 2128
    Loc: Leuven, Belgium
    I could simplify that regsub a bit like this:

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

    Top
    #102776 - 29/09/06 04:00 AM Re: Whois(Channel) Kicker..
    jebjai
    newbie


    Registered: 29/09/06
    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.

    Top
    Page 1 of 1 1


    Moderator:  d00dman, Hammer, Karen, Krejt, Mentality, Merlin, MIMP, ParaBrat, Sojourn, qwerty 
    Hop to: