> On Oct 6, 2015, at 11:38 PM, peter <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

Reply via email to