On 10/07/2015 09:49 AM, Glyph Lefkowitz wrote:

On Oct 6, 2015, at 11:38 PM, peter <commercial...@yahoo.de <mailto:commercial...@yahoo.de>> wrote:

im sure youre solution is just fine, could you show me how you would contruct isBotOnline? im assuming that code would go into the class "mybot", next to irc_ERR_NOSUCKNICK?

The problem with just doing that is that there is no affirmative response that a message was sent, so there's no way to fire the deferred successfully if that's all you're doing. Instead, you can use the ISON command to determine if the bot is online (and of course, the bot might go offline between the check and sending the message, so you will need to handle that case somehow too).

Since doing this is somewhat obscure, here's a working script that just checks if a nick specified on the command line is online on freenode:

    *from* *__future__* *import* print_function
    *from* *twisted.internet.defer* *import* Deferred, inlineCallbacks
    *from**twisted.words.protocols.irc**import*IRCClient
    *from**twisted.internet.endpoints**import*clientFromString
    *from**twisted.internet.protocol**import*Factory

    *class* *mybot*(IRCClient, object):
    *def* __init__(self):
    self._isonQueue = []
    self.motdReceived = Deferred()

    *def* irc_RPL_ISON(self, prefix, params):
            username, d = self._isonQueue.pop(0)
            d.callback((username *in* params[1]))

    *def* isOnline(self, username):
            d = Deferred()
    self.sendLine("ISON " + username)
    self._isonQueue.append((username, d))
    *return* d

    *def* irc_RPL_ENDOFMOTD(self, prefix, params):
    self.motdReceived.callback(None)

    @inlineCallbacks
    *def* main(reactor, nick):
        endpoint = clientFromString(reactor, "tcp:chat.freenode.net:6667")
        proto = *yield* endpoint.connect(Factory.forProtocol(mybot))
    *print*("Waiting for MOTD...")
    *yield* proto.motdReceived
    *print*("Querying...")
        isOnline = *yield* proto.isOnline(nick)
    *if* isOnline:
    *print*(nick, "is online!")
    *else*:
    *print*(nick, "is *NOT* online!")

    *from**twisted.internet.task**import*react
    *from**sys**import*argv
    react(main, argv[1:])



-glyph



_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
thank you very much, i will try to adapt that solution to my code.
_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to