Search code examples
ircbots

Determine If a User Is Idented On IRC


In my IRC Bot, there are some commands that I want to only be usable by me, and I want to check to make sure that anyone using my name is identified with nickserv (idented). I couldn't, however, find an easy way to determine this, which is why I'm here.

Freenode and Rizon are the primary target networks, if that matters.

Edit: I was actually aware of the various usermodes for idented users (although I didn't pay enough attention to realize that they differ!); sorry for not mentioning that before. The raw response that I get from a user, however, doesn't include their usermodes; it looks something like this:

:[email protected] PRIVMSG #erasmus-testing :foo

I suppose, then, that I'm trying to find a way (with various ircds, grr) to get those flags. If, as someone mentioned, Rizon returns whether or not someone is idented in a WHOIS query, then that's the sort of thing I'm looking for.


Solution

  • On freenode, sending a private message to nickserv with the message ACC <nickname> will return a number that indicates the user's ident status:

    The answer is in the form <nickname> ACC <digit>:

     0 - account or user does not exist
     1 - account exists but user is not logged in
     2 - user is not logged in but recognized (see ACCESS)
     3 - user is logged in
    

    The STATUS <nickname> command gives similar results on Rizon:

    The response has this format:

    <nickname> <digit>

     0 - no such user online or nickname not registered
     1 - user not recognized as nickname's owner
     2 - user recognized as owner via access list only
     3 - user recognized as owner via password identification
    

    The advantages that this method has over a WHOIS:

    1. Information about ident status is always included. With WHOISes, you will just not get a line saying something along the lines of "identified with nickserv as such-and-such" if the user is not, in fact, idented.
    2. Consistent number of lines returned. Since I want to grab the message before passing on control to the rest of my program, I can easily read one line out of the buffer (I see synchronization issues in your future!), determine the status, and continue on like normal.