2011-07-12 10 views
6

Próbuję napisać funkcję, która wydrukuje listy nicków w kanale IRC do kanału za pomocą Twisted Python. Jak mam to zrobic? Przeczytałem dokumentację API i widziałem tylko jedno pytanie podobne do mojego na tej stronie, ale tak naprawdę nie odpowiada na moje pytanie. Gdybym wiedział, jak zdobyć listę użytkowników (lub cokolwiek innego, co Twisted rozpoznaje jako), mógłbym po prostu powtórzyć listę przy użyciu pętli for, ale nie wiem, jak uzyskać tę listę.Lista użytkowników w kanale IRC za pomocą Twisted Python IRC framework

+1

naiwniaczek http://stackoverflow.com/questions/5305050/how-to-use-twisted-to-get-an-irc-channels-user-list –

+0

To nie jest dupek, wspomniałem nawet o tym pytaniu, które podałeś w związku, ponieważ NIE JEST to, co próbuję zrobić i NIE jest pomocne. – paul

+0

Jest to w rzeczywistości dupę tego drugiego pytania; Jestem ciekawy, dlaczego uważasz, że tak nie jest. – Glyph

Odpowiedz

6

Połączony przykład, który wydaje się być taki sam, używa WHO, innego polecenia, innego celu. Prawidłowym sposobem jest użycie NAMES.

Rozszerzony IRCClient do obsługi polecenia names.

from twisted.words.protocols import irc 
from twisted.internet import defer 

class NamesIRCClient(irc.IRCClient): 
    def __init__(self, *args, **kwargs): 
     self._namescallback = {} 

    def names(self, channel): 
     channel = channel.lower() 
     d = defer.Deferred() 
     if channel not in self._namescallback: 
      self._namescallback[channel] = ([], []) 

     self._namescallback[channel][0].append(d) 
     self.sendLine("NAMES %s" % channel) 
     return d 

    def irc_RPL_NAMREPLY(self, prefix, params): 
     channel = params[2].lower() 
     nicklist = params[3].split(' ') 

     if channel not in self._namescallback: 
      return 

     n = self._namescallback[channel][1] 
     n += nicklist 

    def irc_RPL_ENDOFNAMES(self, prefix, params): 
     channel = params[1].lower() 
     if channel not in self._namescallback: 
      return 

     callbacks, namelist = self._namescallback[channel] 

     for cb in callbacks: 
      cb.callback(namelist) 

     del self._namescallback[channel] 

przykład:

def got_names(nicklist): 
    log.msg(nicklist) 
self.names("#some channel").addCallback(got_names) 
Powiązane problemy