簡體   English   中英

使用 Twisted Python IRC 框架列出 IRC 頻道中的用戶

[英]List users in IRC channel using Twisted Python IRC framework

我正在嘗試編寫一個 function,它將使用 Twisted Python 將 IRC 通道中的缺口列表打印到通道。 我該怎么做呢? 我已經閱讀了 API 文檔,我只在這個網站上看到了一個與我的問題類似的問題,但它並沒有真正回答我的問題。 如果我知道如何獲取用戶列表(或 Twisted 識別的任何用戶列表),我可以簡單地使用 for 循環迭代列表,但我不知道如何獲取此列表。

您似乎認為的鏈接示例是相同的,使用WHO ,不同的命令,不同的目的。 正確的方法是使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM