[Twisted-Python] how to access irc.IRCClient.* from other classes
Hello, iam playing around with twisted.words.irc and come upon this what i dont understand right now Here is a small example. everything is working fine except the msg that should be send to the channel. from twisted.internet import protocol, reactor from twisted.words.protocols import irc class somestuff: def test(self): self.test = mainirc() self.test.test("#someircchannel","hi") #what i want to access here is #irc.IRCClient.msg class mainirc(irc.IRCClient): nickname = "twistedtest" def test(self,channel,msg): print channel print msg hold = channel hold2 = msg self.msg(hold,hold2) def connectionMade(self): irc.IRCClient.connectionMade(self) self.bot = somestuff() def joined(self,channel): print "joined" self.bot.test() def signedOn(self): self.join("#someircchannel") class mainircFactory(protocol.ClientFactory): protocol = mainirc def clientConnectionLost(self,connector,reason): connector.connect() def clientConnectFailed(self,connector,reason): reactor.stop() if __name__ == '__main__': f = mainircFactory() reactor.connectTCP("irc.someircserver.org",6667,f) reactor.run() speeda@speeda:~$ python twistedirc.py joined #someircchannel hi Traceback (most recent call last): File "/usr/lib/python2.4/site-packages/twisted/internet/tcp.py", line 348, in doRead return self.protocol.dataReceived(data) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 1478, in dataReceived basic.LineReceiver.dataReceived(self, data.replace('\r', '')) File "/usr/lib/python2.4/site-packages/twisted/protocols/basic.py", line 232, in dataReceived why = self.lineReceived(line) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 1486, in lineReceived self.handleCommand(command, prefix, params) --- <exception caught here> --- File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 1498, in handleCommand method(prefix, params) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 1000, in irc_JOIN self.joined(channel) File "twistedirc.py", line 27, in joined self.bot.test() File "twistedirc.py", line 8, in test self.test.test("#tinyworlds","hi") File "twistedirc.py", line 19, in test self.msg(hold,hold2) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 879, in msg self.sendLine(fmt % (message,)) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 572, in sendLine self._reallySendLine(line) File "/usr/lib/python2.4/site-packages/twisted/words/protocols/irc.py", line 568, in _reallySendLine return basic.LineReceiver.sendLine(self, lowQuote(line) + '\r') File "/usr/lib/python2.4/site-packages/twisted/protocols/basic.py", line 277, in sendLine return self.transport.write(line + self.delimiter) exceptions.AttributeError: 'NoneType' object has no attribute 'write' i hope someone can help me thanks in advance Nick Rehm
On 9/5/06, Nick Rehm <speedy@nitroforce.eu> wrote:
Hello, iam playing around with twisted.words.irc and come upon this what i dont understand right now
You have to pass a reference to 'mainirc' to either 'somestuff' or 'test'. e.g. class somestuff: def __init__(self, ircClient): self.ircClient = ircClient def test(self): self.ircClient.msg('foo') class mainirc(irc.IRCClient): ... def connectionMade(self): irc.IRCClient.connectionMade(self) self.bot = somestuff(self) Constructing a new instance of 'mainirc' won't work, because the new instance won't be associated with a connection. hope this helps, jml
participants (2)
-
Jonathan Lange -
Nick Rehm