3

我有一个基本的 IRC 机器人,看起来像这样(见下文),我想做的是使用类似于_5_mins每 5 分钟调用一次的函数LoopingCall

import sys
import re
from twisted.internet import reactor, task, defer, protocol
from twisted.python import log
from twisted.words.protocols import irc
from twisted.application import internet, service
import time

HOST, PORT = 'irc.freenode.net', 6667

class IrcProtocol(irc.IRCClient):
    nickname = 'BOTSNAME'
    password = 'NICKPASSWORD'
    timeout = 600.0

    def signedOn(self):
        pMess = "IDENTIFY %s" % self.password
        self.msg("NickServ",pMess)
        time.sleep(10)
        for channel in self.factory.channels:
            self.join(channel)

    def _5_mins(self):
        self.msg(self.factory.channels[0],"5 minutes have elapsed")

class IrcFactory(protocol.ReconnectingClientFactory):
    channels = ['#BOTCHANNEL']
    protocol = IrcProtocol

if __name__ == '__main__':
    reactor.connectTCP(HOST, PORT, IrcFactory())
    log.startLogging(sys.stdout)
    reactor.run()

elif __name__ == '__builtin__':
    application = service.Application('IrcBot')
    ircService = internet.TCPClient(HOST, PORT, IrcFactory())
    ircService.setServiceParent(application)

如何更改signedOn功能与task.LoopingCall功能的配合,还是有更好的方法?

编辑:我真的很接近解决方案,以下是我所采用的

def signedOn(self):
    pMess = "IDENTIFY %s" % self.password
    self.msg("NickServ",pMess)
    time.sleep(10)
    for channel in self.factory.channels:
        self.join(channel)
    lc = task.LoopingCall(self._5_mins)
    lc.start(self.timeout)
4

1 回答 1

2
def signedOn(self):
    pMess = "IDENTIFY %s" % self.password
    self.msg("NickServ",pMess)
    time.sleep(10)
    for channel in self.factory.channels:
        self.join(channel)
    lc = task.LoopingCall(self._5_mins)
    lc.start(self.timeout)
于 2012-12-05T15:28:20.440 回答