AKA Nick Tracker

By FordLawnmower on Mar 13, 2010

This is a AKA Nick Tracker Script that keeps track of nickname usage/changes based on !@Hostmask match. By default, the script will track the last 21 nicknames used by each host mask, but this can be changed by changing the MaxNicks Alias in the setup portion of the script.
By Default, this script will also display the matching AKA nicks when someone joins. This can be turned off by changing the JoinDisplay alias , as directed in the setup portion of the script.
Example Output:
[22:07:08] * Mule[Zapper] (~FoSho@3d8d9d00.1377149a.res.rr.com) has joined #tttest
AKA MuleZapper AKA MuleTrap MuleDrill MuleBull PowerMule MuleZap MuleCrap MuleZapper

If you choose not to use the automatic on join display, you can still do manual checks by right clicking a nick in the nicklist and;

Selecting AKA >> Check NickName Will do a Manual check of the selected Nick.

Selecting AKA >> Cleanup NickName Will remove Nicknames from the selected nick that end in 4 or more numbers.(ie Unknown1234)

Selecting AKA >> Clear NickName Will reset the history of the selected nick.


AKA >> AKA Search Dialog will bring up a dialog that you can use to do more thorough searches as well as searching nicks that are offline.


To use the dialog, just enter a name or hostmask and click search. *Note that you must tick the radio buttons below the search box to reflect the type of search you are doing.

Once you have some results in the listbox, you can click "Check Selected" to return the nickname list associated with the selected hostmask.

"Copy to Clipboard" will copy the hostmask minus the network name to your clipboard for banning etc.

;AKA Nick Tracker by Ford_Lawnmower irc.mindforge.org #USA-Chat
;**Start Setup
;Change JoinDisplay, below, for On Join AKA Display. On = 1 - Off = 0
alias -l JoinDisplay { return 1 }
;Change MaxNicks, below, to the number of nicknames you want to store for each hostmask. I wouldn't go over 400 with this ;/
alias -l MaxNicks { return 20 }
;Change AKALogo, below, To the text you want displayed before each AKA result.
alias -l AKALogo { return 06 05A06K07A 06 }
;**End Setup
On *:Join:#: {
  if ($nick == $me) { .enable #AKAInit | who $chan }
  NickNamesAdd $nick $+($network,$wildsite)
  if ($JoinDisplay) { .timerNickNames $+ $nick 1 2 NickNames.display $nick $chan $network $wildsite }
on *:Nick: { NickNamesAdd $newnick $+($network,$wildsite) $nick }
alias -l NickNames.display {
  if ($gettok($hget(NickNames,$+($3,$4)),0,126) > 1) {
    echo -g $2 $AKALogo $+(09,$1) $AKALogo 07 $mid($replace($hget(NickNames,$+($3,$4)),$chr(126),$chr(44)),2,-1)
alias -l NickNamesAdd {
  if ($hget(NickNames,$2)) {
    if (!$regex($hget(NickNames,$2),/~\Q $+ $1 $+ \E~/i)) {
      if ($gettok($hget(NickNames,$2),0,126) <= $MaxNicks) {
        hadd NickNames $2 $+($hget(NickNames,$2),$1,~)
      else {
        hadd NickNames $2 $+($mid($hget(NickNames,$2),$pos($hget(NickNames,$2),~,2)),$1,~)
  else {
    hadd -m NickNames $2 $+(~,$1,~,$iif($3,$+($3,~)))
alias -l Fix.All.MindUser {
  var %Fix.Count = $hfind(NickNames,/[^~]+[0-9]{4}[~$]/,0,r).data
  while (%Fix.Count) {
    if ($Fix.MindUser($hget(NickNames,$hfind(NickNames,/[^~]+[0-9]{4}[~$]/,%Fix.Count,r).data))) {
      echo -ag Record %Fix.Count - $v1 - Was Cleaned
      hadd NickNames $hfind(NickNames,/[^~]+[0-9]{4}[~$]/,%Fix.Count,r).data $v1
    dec %Fix.Count
alias -l Fix.MindUser { return $regsubex($1,/[^~]+[0-9]{4}[~$]/g,$null) }
menu nicklist {
  ..Check $$1: {
    if ($gettok($hget(NickNames,$+($network,$address($1,2))),0,126) > 1) {
      NickNames.display $1 $active $network $address($1,2)
    else { echo -ag $AKALogo $+(09,$1) 07has not been known by any other nicknames while I have been watching. }
  ..Cleanup $$1:hadd NickNames $+($network,$address($1,2)) $fix.minduser($hget(NickNames,$+($network,$address($1,2))))
  ..Clear $$1:hadd NickNames $+($network,$address($1,2)) $+(~,$1,~)
  ..AKA Search Dialog:dialog $iif($dialog(AKA_Search),-v,-m) AKA_Search AKA_Search
menu status,channel {
  ..AKA Search Dialog:dialog $iif($dialog(AKA_Search),-v,-m) AKA_Search AKA_Search
  ..Clean All Records:Fix.All.Minduser 
dialog AKA_Search {
  title "AKA Search Engine"
  size -1 -1 206 221
  option dbu
  edit "", 1, 8 5 149 10, autohs
  button "Search", 2, 163 4 32 12
  radio "Search HostMask", 4, 61 22 55 10
  radio "Search Nicknames", 5, 123 22 56 10
  list 6, 8 38 190 169, sort extsel vsbar
  button "Check Selected", 7, 67 206 40 12
  button "Close", 8, 160 206 38 12, cancel
  box "Search Type", 3, 11 17 183 18
  button "Copy to Clipboard", 9, 111 206 46 12
On *:Dialog:Aka_Search:init:*: { did -c $dname 5 }
On *:Dialog:Aka_Search:Sclick:2,7,9: {
  if ($did == 2) && ($did($dname,1)) {
    did -r $dname 6
    var %search $+(*,$v1,*), %type $iif($did($dname,5).state,data,item), %matches = $hfind(NickNames,%search,0,w). [ $+ [ %type ] ]
    while (%matches) {
      did -a $dname 6 $hfind(NickNames,%search,%matches,w). [ $+ [ %type ] ]
      dec %matches
    did -c $dname 6 1   
  elseif ($did == 7) && ($did($dname,6).seltext) { echo -ga $AKALogo 07 $mid($replace($hget(NickNames,$v1),$chr(126),$chr(44)),2,-1) }
  elseif ($did == 9) && ($did($dname,6).seltext) { clipboard $mid($v1,$pos($v1,*,1)) }
On *:Start:{
  if (!$hget(NickNames)) { hmake NickNames 10 }
  if ($isfile(NickNames.hsh)) { hload  NickNames NickNames.hsh }
On *:Exit: { if ($hget(NickNames)) { hsave NickNames NickNames.hsh } } 
On *:Disconnect: { if ($hget(NickNames)) { hsave NickNames NickNames.hsh } }
On *:Unload: { hfree NickNames }
#AKAInit Off
Raw 352:*: { haltdef | NickNamesAdd $6 $+($network,$address($6,2))  }
Raw 315:*: { haltdef | .disable #AKAInit }
#AKAInit End


Sign in to comment.
jenngirl   -  Jul 19, 2020

How can I use this for Textual IRC? Is this only for mIRC?

oldfix   -  Apr 14, 2019

Hello I need help from somebody. I've two kind of scripts, one works with !@host and other one works with !ident@.host . My scripts work fine but in the 1st case when i am connected in 2/3 channells concurrently , I get wrong nick tracking detections, I mean some nicks which don't belong to the users which I monitor and this happens even if the person does not use bnc or vhost or proxies. In the second case, if the person changes his identd i am not able to track the nicks and if they use mibbit or androirc and much people are connected with the same domain, i can't get an accurate detection, this happens because mibbit or android IRC use a unique id for all members.
I know that the 1st case is the best solution (
!*@host ) because it works on user's host but I don't know how to prevent wrong nick detection.

If you can help me, I am ready to show you such scripts and any suggestion or tips will be really appreciated.

Mea   -  Mar 15, 2019


ovelayer   -  May 20, 2015

can this be changed so instead of using $wildsite you can use /userip
so it use's their ip instead of host??

nerdygirl   -  May 03, 2015

It works
But when i click at the nickname -> aka the nick
it says aka soccerboy has not been known by any other nicknames while i have been watching

Lucyfero  -  May 06, 2015

maybe soccerboy has never changed his nick !

Sign in to comment

nerdygirl   -  May 03, 2015

Hey I'm a beginner
Can someone be helpfull and help me with this aka nick tracker
I don't understand this

Spinti89   -  Aug 29, 2014

After a few days a friend of mine told me i that the !ident@ address is a string. After that i searched how to manipulate a string in the mSL.
It has not that hard and now a cloned the AKA script twice. I have now 3 versions:
The 1st is the original
In the 2nd one i used $network,$address($1,3) insted of $network,$address($1,2). It returns *!xhsqygtsw@.63D4284.FBF7C3B7.IP
The last one was the hardest to figure out... This is where i used the string. The code looks like this :

*$network, $replacecs($remove($address($1,0),$right($address($1,2), -4)),$right($remove($address($1,0), $right($address($1,2), -4)), 1),@)**

And it returns the full host !sxhsqygtsw@ without replacing the first letter with a wildcard (*)
Also i changed the file names in which the database is stored.

I uploaded the codes on Scriptbin :

For !xhsqygtsw@.63D4284.FBF7C3B7.IP use the following link to see the code... i removed the menu box (it's commented).. so if you want it back you can remove / and /
For usage you need to type
/haka You can change this in line 52 to fit your needs.
Also i added
This is how to use it, and it can search the "database" for nicks if there are any. I use this if i'm searching for someone who just quit.

And for the one that gave me headaches for !sxhsqygtsw@
The menu box it commented just not to interfere with the other scripts
For usage type /iaka You can change this in line 52 to fit your needs.
Also i added /ofiaka !sxhsqygtsw@ This is how to use it, and it can search the "database" for nicks if there are any. I use this if i'm searching for someone who just quit.

The commented syntax from line 66 to 73 is used in the script made by Ford_Lawnmower
The syntax will show the nicknames for the specified nick if there are any and will give a whois afterwords.
Also the scripts don't interfere with each other... So u can use all 3 of them
I added this line in the script from Ford_Lawnmower

alias akall {
  /aka $1
  /iaka $1
  /haka $1

This will show the results from all 3 databases :-)

I hope this helps someone... And many thanks to Ford_Lawnmower for this great script.

oldfix  -  Apr 14, 2019

Hello, I need your help, how can I contact you?

Sign in to comment

Lucyfero   -  Aug 29, 2014

Wonderful script. Just a typo (I think): in clear and cleanup should be hdel instead of hadd.
I also added an alias to display all the users in a room at once:

alias akaall {
var %max = $nick(#,0)
var %c = 1
while (%c <= %max) {
var %nick = $nick(#,%c)
if ($gettok($hget(NickNames,$+($network,$address(%nick,2))),0,126) > 1) {
NickNames.display %nick $active $network $address(%nick,2)
inc %c 1

Thanks a lot Ford, you are a very good scripter.

Spinti89   -  Aug 12, 2014

is there any identifier for the host address only ? like !user@ and not !user@.host
the $address($nick,3) does not help me very much... cuz some ppl use irc and the ident is the same so the ip allways changes...

(18:12:07) Spinti89 (Spinti89@F1CD9FA3.E669A6F2.32EE8F75.IP) has joined #Romania
Spinti89 (Spinti89@6D2472FD.6B3C843A.5963698.IP) has joined #Romania

any ideeas ?

OrFeAsGr  -  Nov 15, 2015


Sign in to comment

Stewie1k94   -  Jun 14, 2014

Hey, Ford; I was wondering if this was possible. Is there any way to make it so that when I click "Check" via the menu it will display it like it is: > AKA Stewie AKA _Stewie,Stewie but have a space in between each name like: > AKA Stewie AKA _Stewie, Stewie so it's easier to read?

ICQ_Guest   -  Feb 14, 2014

Thanks for this useful script!

Is it somehow possible to make this script working in BNC while I'm offline on the chat?

parad0x30   -  Jan 21, 2014

Hello a piece of help please. How can i include the previous nicks in a /whois response? i want it to say something like this:
[Whois] Guest_763 has also used nicknames: Guest_7631 Guest_7362
I know i have to put it under the raw 318 like a common chans alias i have but i am not sure how to put that one

FordLawnmower  -  Jan 24, 2014

There is a alias for this in the script.
Nicknames.Display : If you use this outside the script you will have to change it from : alias -l Nicknames.Display : to : alias Nicknames.Display : Just remove the "-l" from the alias so it's no longer local.
If you call it from inside the script, you don't have to change anything.

Syntax : /Nicknames.Display Nick Channel/Window
Example: /Nicknames.Display Ford_Lawnmower #Script-Help

parad0x30  -  Jan 24, 2014

Ok i changed that but how can i use it in the whois? btw i use your whois remote. i have this line under raw 318:

Echo -a 4 4[6W14hois4] 14AKA Nicks:4 ---- | haltdef

what should i put in the place of the ---- for it to work? the thing is i may need to whois a user who is not in the channel i am looking at and i want the nicks to appear

FordLawnmower  -  Jan 24, 2014

@parad0x30 You will have to add this line above that one:


You will also have to change the Nicknames.display alias in the aka script to this:

alias NickNames.display {
  if ($gettok($hget(NickNames,$+($3,$4)),0,126) > 1) {
    echo $iif($2 == Status Window,-gs,-g $2) $AKALogo $+(09,$1) $AKALogo 07 $mid($replace($hget(NickNames,$+($3,$4)),$chr(126),$chr(44)),2,-1)
Sign in to comment

Spinti89   -  Dec 11, 2013

I like this script... Help's me a lot
Can you make this script work on ident ? Like... if you right click on a user to scan he's nick based on the ident

RIcko   -  Sep 16, 2013

Is it possible to add a simple command to the script like !aka or that will msg the channel with the results provided from the main script?

MoonCrawlerVG  -  Nov 28, 2013

I've been wondering that myself too

Sign in to comment

Midian   -  May 25, 2013

Hey Ford, I was wondering if you ever found a workaround for Eirwyn's question regarding entire ident@hostmask?

The Pastebin link you provided didn't seem to work for him/her and it doesn't work for me either. Great script, but I get a lot of people using Mibbit in my channel, so it's almost unusable for me, as you can see from this section of the NickNames.hsh:


cj42057   -  May 19, 2013

Nice script and thanks for sharing.

Truk   -  Mar 16, 2013

is it possible to reset the past list of nicknames previously used every day or on startup. I don't want to see what nicknames they used yesterday. not sure where that should happen looking at the script. obviously I am not a script guru.


Truk  -  Mar 22, 2013

the script allows for this but does not completely erase the file.

Truk  -  Apr 04, 2013

or you could do this :) :

on *:START: {
if ($istok(Y|Yes,$$?="Do you want to delete the nicknames tracking file? Y/N?",124)) { remove NickNames.hsh | echo -a NickNames.hsh has been removed.. }
else { HALT }

Sign in to comment

untouchable   -  Feb 28, 2013

Hi there, i am new to this i would some help if i may, how can i transfair the aka to my remote as there is no copy paste section its not working with mine, so how can i do it please? many thanks

FordLawnmower  -  Feb 28, 2013


  • copy the code from hawkee (ctrl+a to mark, ctrl+c to copy)
  • In mirc type alt+r to open the remote editor
  • Type alt+f N to open a new remote
  • Paste in the code (ctrl+v)
  • Type alt+f A
  • Type a unique file name
  • Click save

*The plus sign means at the same time. ie ctrl+c means press ctrl and c at the same time

Sign in to comment

Blizzardo1   -  Dec 13, 2012

Thank you so much, you've saved my life from creating such a wonderful script. :) that would have took me forever to do.

DeeperStill   -  Aug 03, 2012

I still like this script. But I do now wish that the entries were dated as well as showing which network they were on.
I also wish it was possible to search for a specific network list, or all networks.

just a thought

InZanity  -  Jan 14, 2013

Check line 20, just add $fulldate and you are golden

echo -g $2 $fulldate : $+ 

(hope i did the code bit correctly)
For the network part, i havent figgured out how to make it for example, scan network A and post in a channel on network B

Sign in to comment

aethelstan   -  Aug 02, 2012

just a note that I'm running this addon in P&Plus, which uses mIRC version 6.16

aethelstan   -  Aug 02, 2012

Great script which is generally useful, but i've found that on some occasions I'm seeing multiple nicks for people who have only one.
On one occasion I made a note of some of the alternatives on a friend's Nick and waited for them to log into the site and then checked their IP - it's different from the original nick I ran AKA on. How is that possible?

throwaway3856   -  Apr 02, 2012

Hi I'm using mIRC 7.22 i loaded this on remotes but it doesnt show me AKA when someones join neither when i click right the nick on user list I tried joining clones to my channel and doesnt show AKA it only keep saying AKA nick has not been known by any other nicknames while I have been watching. can anyone help?

Edit: anyways script working fine now :D

DeeperStill   -  Aug 21, 2011

I like this . I have used it a while now. There are two things I wish it had. 1. a highlight /delete function to remove entries on the list after you've done a search. And 2. , to have the nicks you get when clicking "check selected", to show up in its own @window.

When I am checking hosts and clicking "check selected" , the nicks pop up in the active window and get lost in the massive posts. I cannot copy paste a group of nicks when I have to go hunting for them in the midst of chatters posts. A separate window including in the dialogue ( with scroll ability) would eliminate this issue for me.

Like it though. I use it daily and constantly


FordLawnmower   -  Aug 06, 2011

@penelope Sending the info to a separate window could be done but I'm not sure how useful it would be.
To get the aka for a user in a channel you can always just right click the nickname and select AKA - check nick.
You can also bring that info up with ctrl+f Nickname with a few clicks.
You may also add a section of code like this to your remotes:

alias CheckOn { window $+(@,$$1) | filter # $+(@,$$1) $+(*,$$1-,*) }

After this is added: Just type /checkon NickNameHere In the channel window and a window will open with all mentions of that nickname, including the aka line.

penelope   -  Aug 06, 2011

You know what would be very cool... if it popped the ip info in a seperate little window. I find if things are busy I miss the info. Is that an easy adjustment?

FordLawnmower   -  Aug 06, 2011

You're welcome penelope :)

penelope   -  Aug 06, 2011

Thanks FordLawnmower. And you're right, Now that it is up and running it is displaying. I thought I needed to set something to "on." Thanks for the quick response. And the script rocks!

FordLawnmower   -  Aug 06, 2011

If you change the return to 0 , the script will NOT show you a list of previous nicknames for each person when they join a channel.
If you leave the return at 1 , When someone joins a channel it will show you their previous nicknames.

There is no reason to change anything here unless you don't want to see the previous nicknames on join.
This script works fine without changing anything.

penelope   -  Aug 05, 2011

I'm feeling pretty dense. I don't understand exactly what to do in the startup instructions, specifically how to turn it on:

;**Start Setup
;Change JoinDisplay, below, for On Join AKA Display. On = 1 - Off = 0
alias -l JoinDisplay { return 1 }

Can someone help me out, please?

Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.