[Twisted-Python] irc bot, reacting to: irc_ERR_NOSUCHNICK. after the code where the reactor was started

peter commercials24 at yahoo.de
Wed Oct 7 02:35:23 MDT 2015


On 10/07/2015 09:49 AM, Glyph Lefkowitz wrote:
>
>> On Oct 6, 2015, at 11:38 PM, peter <commercials24 at yahoo.de 
>> <mailto:commercials24 at 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 at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20151007/e70f5054/attachment-0002.html>


More information about the Twisted-Python mailing list