;**************************************************************** ; ; KeepMyNick ver 1.5 by Czuz (https://github.com/Czuz) ; To install just type: /load -rs KeepMyNick.mrc ; ;**************************************************************** ; ; Help: ; KEEPNICK ; Syntax: /keepnick [<nick>] [<network>|default] ; Assigns <nick> to <network> (Or current network.) W/o argument ; disables grabbing until reconnection. ; ; LISTNICK ; Syntax: /listnick [-all] ; Displays list of nicks. ; ; DELNICK ; Syntax: /delnick [<network>|default] ; Remove nick associated with <network> (Or current network) from ; list ; ;**************************************************************** ; ChangeLog: ; ver 1.5 (08.05.2021) ; - published on GitHub ; ver 1.4 (23.03.2005) ; - better handling of nick collisions on IRCnet ; ver 1.3 (15.03.2005) ; - new download link ; - better handling of ERR_RESTRICTED on IRCnet ; ver 1.2 (28.08.2004) ; - new download link ; ver 1.1 (04.06.2004) ; - spelling checked ; - fixed handling of raw events ; - default nick ; - /keepnick <nick> default, /delnick default ; - some GUI changes ; ver 1.0 (30.05.2004) ; - setup dialog (Commands->KeepMyNick v1.0) ; - minor changes in functions ; - extended syntax of commands ; - configurable timer delay ; ver 1.0-pre3 (13.05.2004) ; - added support for raw events: ; ERR_ERRONEUSNICKNAME, ERR_NICKNAMEINUSE, ERR_UNAVAILRESOURCE and ERR_RESTRICTED ; ver 1.0-pre2 (25.12.2003) ; - fixed disappearing timer bug ; - $comchan() instead of $ial() ; - minor bugs fixed ; ver 1.0-pre1 (22.12.2003) ; - keeping different nicks in multi-server mode ; - /keepnick, /listnick and /delnick commands ; - saving settings to file on exit and reading them on first connect ; - three states of nick grabbing: ; 0 - disabled ; 1 - passive (on events only, when we are on the same channel as nickstealer) ; 2 - active (periodically nick checking with timer) ; ; ver 0.9 (a long time ago) ; - simple on-event nick keeping for a single network ; ;**************************************************************** ;--------------------------[ E V E N T S ]-------------------------- on *:LOAD: { %KMN.Version = KeepMyNick v1.5 echo -st [KeepMyNick] Loading %KMN.Version ... if ($version < 6.03) { echo -st [KeepMyNick] Script NOT installed. Upgrade your mIRC version to 6.03+. timer 1 2 unload -rs " $+ $script $+ " halt } if (%KeepMyNickDelay) { %KMN.Delay = %KeepMyNickDelay unset %KeepMyNickDelay } else { %KMN.Delay = 10 } if ($hget(MyNicks) == $null) { hmake MyNicks 10 if ($scon(0) > 0 && $isfile(KeepMyNick.dat)) { hload -b MyNicks KeepMyNick.dat } } echo -st [KeepMyNick] - DONE! - echo -st [KeepMyNick] echo -st [KeepMyNick] Available commands: echo -st [KeepMyNick] /keepnick [<nick>] [<network>|default] echo -st [KeepMyNick] /listnick [-all] echo -st [KeepMyNick] /delnick [<network>|default] echo -st [KeepMyNick] echo -st [KeepMyNick] For graphic setup, go to Menu->Commands-> $+ %KMN.Version } on *:UNLOAD: { .timerKeepMyNick off if ($hget(MyNicks)) { hsave -ob MyNicks KeepMyNick.dat hfree MyNicks } unset %KMN.Delay unset %KMN.Version unset %KMN.Default unset %KMN.Options echo -st [KeepMyNick] Bye... } on *:CONNECT: { if ($scon(0) == 1) { if ($isfile(KeepMyNick.dat)) { if ($hget(MyNicks) == $null) { hmake MyNicks 10 } hload -b MyNicks KeepMyNick.dat } } if ($KMN.MyNick) { KMN.ChangeNickState 2 } elseif (%KMN.Options == KMN.AddDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default } elseif (%KMN.Options == KMN.KeepDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default 1 } KMN.GetMyNick } on *:DISCONNECT: { if ($nick == $me && $KMN.NickIsHidden) { hdel MyNicks $KMN.FindNetwork } } on *:EXIT: { if ($hget(MyNicks)) { hsave -ob MyNicks KeepMyNick.dat hfree MyNicks } } on *:KICK:#: { if ($nick == $me || $nick == $KMN.MyNick) { if ( $KMN.NickState > 0 ) { KMN.ChangeNickState 2 } } } on *:PART:#: { if ($nick == $me || $nick == $KMN.MyNick) { if ( $KMN.NickState > 0 ) { KMN.ChangeNickState 2 } } } on *:NICK: { if ($nick != $me && $nick == $KMN.MyNick) { if ( $KMN.NickState > 0 ) { tnick $KMN.MyNick } } elseif ($nick == $me && $nick == $KMN.MyNick && $KMN.NickState > 0) { echo -at [KeepMyNick] Disabled for network $KMN.FindNetwork KMN.ChangeNickState 0 } } on *:QUIT: { if ($nick != $me && $nick == $KMN.MyNick) { if ( $KMN.NickState > 0 ) { tnick $KMN.MyNick } } } ;----------------------[ R A W E V E N T S ]---------------------- ; ERR_ERRONEUSNICKNAME raw 432:*: { if ($KMN.MyNick && $2 == $KMN.MyNick) { echo -st [KeepMyNick] $2 - Erroneous Nickname echo -st [KeepMyNick] Disabling for network $KMN.FindNetwork KMN.ChangeNickState 0 halt } } ; ERR_NICKNAMEINUSE raw 433:*: { if ($KMN.MyNick && $2 == $KMN.MyNick) { halt } } ; ERR_UNAVAILRESOURCE raw 437:*: { if ($KMN.MyNick && $2 == $KMN.MyNick) { halt } } ; ERR_RESTRICTED raw 484:*: { if ($KMN.FindNetwork != IRCnet || $left($me, 1) !isin 0123456789) { if ($KMN.NickState && $KMN.NickState != 0) { echo -st [KeepMyNick] Your connection is restricted! echo -st [KeepMyNick] Disabling for network $KMN.FindNetwork KMN.ChangeNickState 0 halt } } } ;---------------------[From OmenServe 1.42-b08]--------------------- ; This should compensate for NewNet's lack of $network issues alias KMN.FindNetwork { if ( $network != $null ) { return $network } if ( $server == irc.aohell.org ) { return NewNet } if ( $server == irc.d0t.net ) { return NewNet } if ( $server == irc.dividedspace.com ) { return NewNet } if ( $server == irc.dragonskeep.com ) { return NewNet } if ( $server == irc.eskimo.com ) { return NewNet } if ( $server == irc.feartomorrow.com ) { return NewNet } if ( $server == irc.firex.org ) { return NewNet } if ( $server == irc.josephbarnhart.net ) { return NewNet } if ( $server == irc.linux-friendly-56k.com ) { return NewNet } if ( $server == irc.phantomshitter.net ) { return NewNet } if ( $server == irc.sweatnet.net ) { return NewNet } if ( $server == irc.moo.me.uk ) { return NewNet } if ( $server == olympic.olympos-net.gr ) { return NewNet } if ( $server != $null ) { return $server } return Offline } ;------------------------------[END]-------------------------------- ;-----------------------[ F U N C T I O N S ]----------------------- alias KMN.MyNick { if ($1) { return $gettok($hget(MyNicks, $1), 2, 32) } else { return $gettok($hget(MyNicks, $KMN.FindNetwork), 2, 32) } } alias KMN.NickState { if ($1) { return $gettok($hget(MyNicks, $1), 1, 32) } else { return $gettok($hget(MyNicks, $KMN.FindNetwork), 1, 32) } } alias KMN.NickIsHidden { if ($1) { return $gettok($hget(MyNicks, $1), 3, 32) } else { return $gettok($hget(MyNicks, $KMN.FindNetwork), 3, 32) } } alias KMN.ChangeNickState { hadd -m MyNicks $KMN.FindNetwork $1 $mid($hget(MyNicks, $KMN.FindNetwork), 3) } alias KMN.GetMyNick { var %currentserver = $cid var %i = 1 while ($scon(%i)) { scid $scon(%i) if ( $server != $null && $me != $KMN.MyNick && $KMN.NickState > 1 ) { if ($comchan($KMN.MyNick,0) != 0) { KMN.ChangeNickState 1 } else { tnick $KMN.MyNick } } inc %i } scid %currentserver .timerKeepMyNick -i 1 %KMN.Delay KMN.GetMyNick } alias KMN.GetNetworkFromLine { return $gettok($did(KMN.Setup, 11).seltext, 2, $asc(@)) } alias KMN.CheckDelay { if ($1 !isnum) { return 10 } elseif ($1 < 5 ) { return 5 } elseif ($1 > 600) { return 600 } else { return $1 } } alias KMN.UpdateNicks { var %currentserver = $cid var %i = 1 while ($scon(%i)) { scid $scon(%i) if ((!$KMN.MyNick || $KMN.NickIsHidden) && %KMN.Options == KMN.AddDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default } elseif ((!$KMN.MyNick || $KMN.NickIsHidden) && %KMN.Options == KMN.KeepDef) { hadd -m MyNicks $KMN.FindNetwork 2 %KMN.Default 1 } elseif ($KMN.NickIsHidden && %KMN.Options != KMN.KeepDef) { hdel MyNicks $KMN.FindNetwork } inc %i } scid %currentserver KMN.GetMyNick } alias KMN.DialogDelNick { if ($1) { hdel MyNicks $1 did -d KMN.Setup 11 $did(KMN.Setup, 11, 1).sel } } alias KMN.DialogAddNick { if ($1) { hdel MyNicks $1 } hadd -m MyNicks $did(KMN.AddEdit,101) 2 $did(KMN.AddEdit,102) if ($1) { did -o KMN.Setup 11 $did(KMN.Setup, 11, 1).sel $did(KMN.AddEdit,102) $+ @ $+ $did(KMN.AddEdit,101) } else { did -a KMN.Setup 11 $did(KMN.AddEdit,102) $+ @ $+ $did(KMN.AddEdit,101) } KMN.GetMyNick } alias KMN.DialogCheckBox { if ($1 == 23) { var %i = 24 } else { var %i = 23 } if ($did(KMN.setup, $1).state == 0) { if ($1 == 23) { var %i = 24 } else { var %i = 23 } %KMN.Options = $null did -e KMN.setup %i } else { if ($1 == 23) { var %i = 24 %KMN.Options = KMN.AddDef } else { var %i = 23 %KMN.Options = KMN.KeepDef } did -b KMN.setup %i } } ;------------------------[ C O M M A N D S ]------------------------ alias keepnick { if ($2 == $null && $server == $null) { echo -st [KeepMyNick] Connect to a server first. halt } if ($1) { if ($2 && $2 != default) { hadd -m MyNicks $2 2 $1 } elseif ($2 && $2 == default) { %KMN.Default = $1 | %KMN.Options = KMN.KeepDef } else { hadd -m MyNicks $KMN.FindNetwork 2 $1 } KMN.GetMyNick } else { echo -st [KeepMyNick] Disabled for network $KMN.FindNetwork KMN.ChangeNickState 0 } } alias listnick { echo -at [KeepMyNick] List of nicks: var %i = 1 if ($1 == -all) { var %max.servers = $hget(MyNicks,0).item while (%i <= %max.servers) { var %tmpserver = $hget(MyNicks,%i).item if (!$KMN.NickIsHidden(%tmpserver)) { echo -at [KeepMyNick] $KMN.MyNick(%tmpserver) $+ @ $+ %tmpserver } inc %i } } else { var %currentserver = $cid while ($scon(%i)) { scid $scon(%i) if ($server && $KMN.MyNick && !$KMN.NickIsHidden) { echo -at [KeepMyNick] $KMN.MyNick $+ @ $+ $KMN.FindNetwork $iif(($KMN.NickState == 0),(disabled),(enabled)) } inc %i } scid %currentserver } } alias delnick { if ($1 && $1 == default && %KMN.Options = KMN.KeepDef) { echo -st [KeepMyNick] Default nick disabled. %KMN.Options = $null KMN.UpdateNicks } elseif ($1 && $KMN.MyNick($1)) { echo -st [KeepMyNick] Nick for $1 deleted. hdel MyNicks $1 } elseif ($1 == $null && $KMN.MyNick) { echo -st [KeepMyNick] Nick for $KMN.FindNetwork deleted. hdel MyNicks $KMN.FindNetwork } else { echo -st [KeepMyNick] No nick for that network. } } ;----------------------------[ M E N U ]---------------------------- menu menubar { %KMN.Version { dialog -m KMN.setup KMN.SetupDialog } } ;-------------------------[ D I A L O G S ]------------------------- dialog -l KMN.SetupDialog { title %KMN.Version size -1 -1 210 155 option dbu box "Setup", 10, 2 2 206 130 list 11, 30 19 165 65, size, sort, vsbar button "Add", 12, 6 19 20 15 button "Edit", 13, 6 36 20 15 button "Del", 14, 6 53 20 15 text "Nicks:", 15, 31 10 25 8 text %KMN.Version by Czuz, 16, 125 90 80 8 link "Latest version", 17, 125 98 80 8 text "Timer delay:", 18, 30 87 30 8 edit %KMN.Delay, 19, 63 86 35 10, right, limit 4 text "sec.", 20, 100 87 10 8 text "Default nick:", 21, 30 99 30 8 edit %KMN.Default, 22, 63 98 35 10, right check "Add default nick to undefined networks", 23, 30 111 200 8 check "Keep default nick on undefined networks", 24, 30 121 200 8 button "Done", 99, 85 135 40 15, ok } dialog -l KMN.AddEditDialog { title "KeepMyNick - Add/Edit" size -1 -1 145 60 option dbu combo 101, 15 15 60 10, edit, vsbar, drop edit "", 102, 90 15 40 10 text "Network:", 103, 17 5 58 8 text "Nick:", 104, 92 5 38 8 button "Ok", 109, 30 35 30 15, ok button "Cancel", 110, 85 35 30 15, cancel } on *:dialog:KMN.setup:init:0 { var %max.servers = $hget(MyNicks,0).item var %i = 1 while (%i <= %max.servers) { var %tmpserver = $hget(MyNicks,%i).item if (!$KMN.NickIsHidden(%tmpserver)) { did -a KMN.setup 11 $KMN.MyNick(%tmpserver) $+ @ $+ %tmpserver } inc %i } if (%KMN.Options == KMN.AddDef) { did -c KMN.setup 23 | did -b KMN.setup 24 } elseif (%KMN.Options == KMN.KeepDef) { did -c KMN.setup 24 | did -b KMN.setup 23 } } on *:dialog:KMN.setup:sclick:12 { did -u KMN.Setup 11 $did(KMN.Setup, 11, 1).sel $dialog(KMN.AddEdit, KMN.AddEditDialog, -4) } on *:dialog:KMN.setup:sclick:13 { $dialog(KMN.AddEdit, KMN.AddEditDialog, -4) } on *:dialog:KMN.setup:sclick:14 { $KMN.DialogDelNick($KMN.GetNetworkFromLine) } on *:dialog:KMN.setup:sclick:17 { run https://github.com/Czuz/KeepMyNick } on *:dialog:KMN.setup:edit:19 { %KMN.Delay = $KMN.CheckDelay($did(KMN.setup,19)) } on *:dialog:KMN.setup:edit:22 { %KMN.Default = $did(KMN.setup, 22)) } on *:dialog:KMN.setup:sclick:23,24 { $KMN.DialogCheckBox($did) } on *:dialog:KMN.setup:sclick:99 { $KMN.UpdateNicks } on *:dialog:KMN.AddEdit:init:0 { var %sel.network = $KMN.GetNetworkFromLine if (%sel.network) { did -a KMN.AddEdit 101 %sel.network } var %currentserver = $cid var %i = 1 while ($scon(%i)) { scid $scon(%i) if ($server != $null && $network != $did(KMN.AddEdit,101,1)) { did -a KMN.AddEdit 101 $KMN.FindNetwork } inc %i } scid %currentserver did -c KMN.AddEdit 101 1 did -i KMN.AddEdit 102 1 $KMN.MyNick($did(KMN.AddEdit,101,1)) } on *:dialog:KMN.AddEdit:sclick:109 { $KMN.DialogAddNick($KMN.GetNetworkFromLine) } ;----------------------------[ E N D ]------------------------------