2011-07-12 13 views
6

Twisted Pythonを使用してIRCチャンネルのニックのリストをチャンネルに出力する機能を記述しようとしています。これはどうすればいいですか? APIドキュメントを読みましたが、このサイトの似たような質問が1つしかありませんでしたが、実際に私の質問には答えません。ユーザーリストを取得する方法を知っていれば、forループを使用して単純にリストを反復できますが、このリストを取得する方法はわかりません。Twisted Python IRCフレームワークを使用してIRCチャンネルのユーザを一覧表示する

+1

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

+0

これは詐欺ではない、私はあなたが質問にリンクしたその質問に言及しています。なぜなら、私がやろうとしているものではなく、役に立たないからです。 – paul

+0

それは実際には、他の質問のdupです。私はあなたがなぜそうではないと思うのか不思議です。 – Glyph

答えて

6

あなたが同じだと思われるリンクされた例はWHO、別のコマンド、別の目的を使用します。正しい方法はNAMESです。

namesコマンドをサポートする拡張IRCClient。

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] 

例:

def got_names(nicklist): 
    log.msg(nicklist) 
self.names("#some channel").addCallback(got_names) 
関連する問題