Question

Whee first question! hi5

So, I have my own version of the Phenny python IRC bot (https://github.com/sbp/phenny). What I'm trying to do is have phenny query the IRC server for a list of nicks who are in a given channel.

I know (from looking at some of phenny's modules) that I can query the server using the following command:

phenny.write(['NAMES'], channel)

Where I'm having trouble is in getting the response from the server and parsing it into a list of nicks. I recognize that the answer I want is probably in the bot.py or irc.py phenny modules, but I've only been writing Python for about 2 months and can't quite get my mind around it.

Any help would be appreciated, thank you!!

Was it helpful?

Solution

OK, so I found a way to do it, which (mostly) works.

I have a routine which triggers on a '353' event, which is how the server responds to /NAMES commands. It stores the list of nicks into a shelve db, indexed by channel.

def nametrigger(phenny, input):
    names = re.split(' ', input)
    names = [n.split('!')[0] for n in names]
    names = [n.replace('~','') for n in names]
    namesdb = shelve.open(phenny.logdir+'/nicks')
    namesdb[input.args[2]] = names
    namesdb.close()
nametrigger.event = '353'
nametrigger.rule = '(.*)'
nametrigger.priority = 'high'

I wrote some utility commands to call /NAMES whenever joining a channel, and whenever someone else joins, leaves, or changes nicks. That should keep the db up to date, though it doesn't seem to work 100% yet.

Then, whenever I want the list of nicks, I can just load the db.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top