tags:

views:

200

answers:

5

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.

A: 

As your username is registered, before your bot logs in, you do this command:

/ns ghost username password

This command will remove any user that is logged in on your user, remember that I only used this in Freenode, I don't know if it will function on another server.

Nathan Campos
Both target networks support ghosting, yes, but I don't want my bot to ghost me! I'm trying to give my bot a way to recognize that I am truly who I claim I am, and avoid impersonations.
Xiong Chiamiov
+1  A: 

With Freenode, if a user is identified to NickServ then their user has the +e mode set. Not sure if Rizon has something similar.

jamessan
+1  A: 

Nick registration is not part of the IRC standard. It is always offered by customized IRC servers and/or bots. I don't think you're going to find a truly universal solution, but NickServ is a common available implementation, which would work on many networks. Wikipedia has more info.

You may want to sidestep the problem entirely and have your user register with your bot, instead of with nickserv. Your bot would then do the password checking, and would invalidate the user's credentials when the user logs out. This would be a universal solution.

rmeador
I considered this for another feature, but the way I was implementing it in my head involved separate prompts for username and password, and risked delaying all functions unless I spun off another thread, which I really don't feel like doing atm. Now that it's not 2am :), the method you're suggesting is much more hopeful. While I'd rather not handle authentication, it seems likely that this will be what I end up doing.
Xiong Chiamiov
+1  A: 

UnrealIRCd and hybrd set +r to registered users, I'm not sure if all IRC servers do this though, it's pretty unstandardized. Also on Rizon you can whois and it will tell you if the user is registered.

Longpoke
A: 

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

The answer is in the form ACC :

 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 command gives similar results on Rizon:

The response has this format:

nickname status-code

 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.
Xiong Chiamiov