Determine If a User Is Idented On IRC

Xiong Chiamiov picture Xiong Chiamiov · Nov 5, 2009 · Viewed 9k times · Source

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.

Answer

Xiong Chiamiov picture Xiong Chiamiov · Nov 14, 2009

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.