6
我正在嘗試編寫一個函數,它將使用Twisted Python將IRC頻道中的刻度列表打印出來。我該怎麼做呢?我已經閱讀了API文檔,在這個網站上我只看到過類似於我的一個問題,但它並沒有真正回答我的問題。如果我知道如何獲取用戶列表(或者Twisted認爲它是什麼),我可以簡單地使用for循環遍歷列表,但我不知道如何獲取這個列表。使用Twisted Python IRC框架在IRC頻道中列出用戶
我正在嘗試編寫一個函數,它將使用Twisted Python將IRC頻道中的刻度列表打印出來。我該怎麼做呢?我已經閱讀了API文檔,在這個網站上我只看到過類似於我的一個問題,但它並沒有真正回答我的問題。如果我知道如何獲取用戶列表(或者Twisted認爲它是什麼),我可以簡單地使用for循環遍歷列表,但我不知道如何獲取這個列表。使用Twisted Python IRC框架在IRC頻道中列出用戶
你似乎認爲的鏈接例子是相同的,使用WHO
,不同的命令,不同的目的。正確的方法是使用NAMES
。
擴展的IRCClient支持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]
實施例:
def got_names(nicklist):
log.msg(nicklist)
self.names("#some channel").addCallback(got_names)
欺騙http://stackoverflow.com/questions/5305050/how-to-use-twisted-to-get-an-irc-channels-user-list –
這不是一個騙局,我甚至提到了你關聯的問題,因爲這不是我想要做的,也沒有幫助。 – paul
這實際上是另一個問題的一個重複;我很好奇你爲什麼認爲它不是。 – Glyph