Esempio n. 1
0
 def _feedMsg(self, query, timeout=None, to=None, frm=None,
              usePrefixChar=True):
     if to is None:
         to = self.irc.nick
     if frm is None:
         frm = self.prefix
     if timeout is None:
         timeout = self.timeout
     if self.myVerbose:
         print # Extra newline, so it's pretty.
     prefixChars = conf.supybot.reply.whenAddressedBy.chars()
     if not usePrefixChar and query[0] in prefixChars:
         query = query[1:]
     msg = ircmsgs.privmsg(to, query, prefix=frm)
     if self.myVerbose:
         print 'Feeding: %r' % msg
     self.irc.feedMsg(msg)
     fed = time.time()
     response = self.irc.takeMsg()
     while response is None and time.time() - fed < timeout:
         time.sleep(0.1) # So it doesn't suck up 100% cpu.
         drivers.run()
         response = self.irc.takeMsg()
     if self.myVerbose:
         print 'Response: %r' % response
     return response
Esempio n. 2
0
    def testOpFail(self):
        import supybot.drivers as drivers
        import supybot.schedule as schedule

        pluginConf.autoremove.notify.channels.set('#test')
        try:
            cb = self.getCallback()
            self.feedBan('asd!*@*')
            self.assertNotError('duration 1 1')
            print 'waiting 4 secs ...'
            time.sleep(2)
            cb.autoRemoveBans(self.irc)
            msg = self.irc.takeMsg() # op msg
            self.assertEqual(str(msg).strip(), "PRIVMSG Chanserv :op #test test")
            schedule.rescheduleEvent('Bantracker_getop_#test', 1)
            time.sleep(2)
            drivers.run()
            msg = self.irc.takeMsg() # fail msg
            self.assertEqual(str(msg).strip(),
                    "NOTICE #test :Failed to get op in #test")
            self.op()
            msg = self.irc.takeMsg() # unban msg
            self.assertEqual(str(msg).strip(), "MODE #test -b :asd!*@*")
        finally:
            pluginConf.autoremove.notify.channels.set('')
Esempio n. 3
0
 def _feedMsg(self, query, timeout=None, to=None, frm=None,
              usePrefixChar=True):
     if to is None:
         to = self.irc.nick
     if frm is None:
         frm = self.prefix
     if timeout is None:
         timeout = self.timeout
     if self.myVerbose:
         print # Extra newline, so it's pretty.
     prefixChars = conf.supybot.reply.whenAddressedBy.chars()
     if not usePrefixChar and query[0] in prefixChars:
         query = query[1:]
     msg = ircmsgs.privmsg(to, query, prefix=frm)
     if self.myVerbose:
         print 'Feeding: %r' % msg
     self.irc.feedMsg(msg)
     fed = time.time()
     response = self.irc.takeMsg()
     while response is None and time.time() - fed < timeout:
         time.sleep(0.1) # So it doesn't suck up 100% cpu.
         drivers.run()
         response = self.irc.takeMsg()
     if self.myVerbose:
         print 'Response: %r' % response
     return response
Esempio n. 4
0
 def _feedMsg(self,
              query,
              timeout=None,
              to=None,
              frm=None,
              private=False,
              usePrefixChar=True):
     if to is None:
         if private:
             to = self.irc.nick
         else:
             to = self.channel
     if frm is None:
         frm = self.prefix
     if timeout is None:
         timeout = self.timeout
     if self.myVerbose:
         print  # Newline, just like PluginTestCase.
     prefixChars = conf.supybot.reply.whenAddressedBy.chars()
     if query[0] not in prefixChars and usePrefixChar:
         query = prefixChars[0] + query
     msg = ircmsgs.privmsg(to, query, prefix=frm)
     if self.myVerbose:
         print 'Feeding: %r' % msg
     self.irc.feedMsg(msg)
     fed = time.time()
     response = self.irc.takeMsg()
     while response is None and time.time() - fed < timeout:
         time.sleep(0.1)
         drivers.run()
         response = self.irc.takeMsg()
     if response is not None:
         if response.command == 'PRIVMSG':
             args = list(response.args)
             # Strip off nick: at beginning of response.
             if args[1].startswith(self.nick) or \
                args[1].startswith(ircutils.nickFromHostmask(self.prefix)):
                 try:
                     args[1] = args[1].split(' ', 1)[1]
                 except IndexError:
                     # Odd.  We'll skip this.
                     pass
             ret = ircmsgs.privmsg(*args)
         else:
             ret = response
     else:
         ret = None
     if self.myVerbose:
         print 'Returning: %r' % ret
     return ret
Esempio n. 5
0
 def _feedMsg(self, query, timeout=None, to=None, frm=None, private=False,
              usePrefixChar=True):
     if to is None:
         if private:
             to = self.irc.nick
         else:
             to = self.channel
     if frm is None:
         frm = self.prefix
     if timeout is None:
         timeout = self.timeout
     if self.myVerbose:
         print # Newline, just like PluginTestCase.
     prefixChars = conf.supybot.reply.whenAddressedBy.chars()
     if query[0] not in prefixChars and usePrefixChar:
         query = prefixChars[0] + query
     if sys.version_info[0] < 3 and isinstance(query, unicode):
         query = query.encode('utf8') # unicode->str
     msg = ircmsgs.privmsg(to, query, prefix=frm)
     if self.myVerbose:
         print 'Feeding: %r' % msg
     self.irc.feedMsg(msg)
     fed = time.time()
     response = self.irc.takeMsg()
     while response is None and time.time() - fed < timeout:
         time.sleep(0.1)
         drivers.run()
         response = self.irc.takeMsg()
     if response is not None:
         if response.command == 'PRIVMSG':
             args = list(response.args)
             # Strip off nick: at beginning of response.
             if args[1].startswith(self.nick) or \
                args[1].startswith(ircutils.nickFromHostmask(self.prefix)):
                 try:
                     args[1] = args[1].split(' ', 1)[1]
                 except IndexError:
                     # Odd.  We'll skip this.
                     pass
             ret = ircmsgs.privmsg(*args)
         else:
             ret = response
     else:
         ret = None
     if self.myVerbose:
         print 'Returning: %r' % ret
     return ret
Esempio n. 6
0
def main():
    import supybot.conf as conf
    import supybot.world as world
    import supybot.drivers as drivers
    import supybot.schedule as schedule
    # We schedule this event rather than have it actually run because if there
    # is a failure between now and the time it takes the Owner plugin to load
    # all the various plugins, our registry file might be wiped.  That's bad.
    interrupted = False
    when = conf.supybot.upkeepInterval()
    schedule.addPeriodicEvent(world.upkeep, when, name='upkeep', now=False)
    world.startedAt = started
    while world.ircs:
        try:
            drivers.run()
        except KeyboardInterrupt:
            if interrupted:
                # Interrupted while waiting for queues to clear.  Let's clear
                # them ourselves.
                for irc in world.ircs:
                    irc._reallyDie()
                    continue
            else:
                interrupted = True
                log.info('Exiting due to Ctrl-C.  '
                         'If the bot doesn\'t exit within a few seconds, '
                         'feel free to press Ctrl-C again to make it exit '
                         'without flushing its message queues.')
                world.upkeep()
                for irc in world.ircs:
                    quitmsg = conf.supybot.plugins.Owner.quitMsg() or \
                              'Ctrl-C at console.'
                    irc.queueMsg(ircmsgs.quit(quitmsg))
                    irc.die()
        except SystemExit, e:
            s = str(e)
            if s:
                log.info('Exiting due to %s', s)
            break
        except: