5
""" exec gozerbot commands from the command line. """
7
__copyright__ = 'this file is in the public domain'
17
for ex in exceptionevents:
19
print "EXCEPTION NR %s" % teller
21
print "command: " + ex[0].txt
22
print "options: " + str(ex[0].options)
24
print "total of %s exceptions" % teller
28
starttime = time.time()
29
sys.path.insert(0, os.getcwd())
31
from gozerbot.tests import tests
32
from gozerbot.utils.exception import handle_exception, exceptionlist, exceptionevents
33
from gozerbot.eventbase import EventBase
34
from gozerbot.botbase import BotBase
35
from gozerbot.users import users
36
from gozerbot.exit import globalshutdown
37
from gozerbot.eventhandler import mainhandler
38
from gozerbot.utils.log import enable_logging, disable_logging
39
from gozerbot.utils.generic import waitforqueue, makeoptions
40
from gozerbot.threads.thr import start_new_thread
41
from gozerbot.periodical import periodical
42
from gozerbot.plugins import plugins
43
from gozerbot.database.alchemy import startmaindb
44
from gozerbot.persist.persist import Persist
45
from gozerbot.commands import cmnds
50
from optparse import OptionParser
51
import asyncore, time, Queue
61
cmndargs = sys.argv[1:index]
62
botargs = sys.argv[index+1:]
67
parser = OptionParser(usage='usage: %prog [options]', version='%prog ' + gozerbot.__version__)
68
parser.add_option('-l', '--loglevel', type='string', default=False, dest='loglevel',
70
parser.add_option('-c', '--chan', type='string', default=False, dest='channel',
71
help="channel to use")
72
parser.add_option('-n', '--nick', type='string', default=False, dest='nick',
74
parser.add_option('-u', '--userhost', type='string', default=False, dest='userhost',
75
help="userhost to use")
76
parser.add_option('-e', '--exceptions', action="store_true", default=False, dest='exceptions',
77
help="show exceptions list after finishing the command")
78
parser.add_option('-w', '--wait', type="string", default=False, dest='wait',
79
help="nr of seconds to wait for completion")
80
parser.add_option('-v', '--verbose', action="store_true", default=False, dest='verbose',
82
parser.add_option('-x', '--loop', type="string", default=False, dest='loop',
83
help="nr times to loop")
84
parser.add_option('-b', '--bork', action='store_true', default=False,dest='bork',
85
help="bork (exit) on exception")
87
opts, args = parser.parse_args(cmndargs)
99
import gozerbot.utils.exception
100
gozerbot.utils.exception.borkonexception = True
101
print "BORK ON EXCEPTION ENABLED"
103
enable_logging(int(opts.loglevel) or 1000)
107
print "GOZERBOT %s starting" % gozerbot.__version__
108
print "loading plugins ..."
114
queue = Queue.Queue()
118
bot = BotBase('execbot', {'nick': opts.nick or 'exec'})
120
event.nick = opts.nick or 'exec'
121
event.userhost = opts.userhost or 'exec@gozerbot'
124
users.add(event.nick, [event.userhost,], ['USER', 'OPER'])
125
except Exception, ex:
128
event.txt = "!" + " ".join(args)
131
event.txt += ' ' + ' '.join(botargs)
133
event.origtxt = event.txt
137
event.channel = opts.channel or "exec@gozerbot"
138
event.queues.append(Queue.Queue())
143
start_new_thread(bot.serveforever, ())
146
loop = int(opts.loop)
149
for i in range(loop):
150
print "STARTING LOOP #%s" % i
151
start_new_thread(bot.domsg, (event, ))
154
resultnotused = waitforqueue(queue, timeout=int(opts.wait))
156
resultnotused = waitforqueue(queue, 3600)
161
if v: print "elapsed time: %s seconds" % (time.time() - starttime)
166
except KeyboardInterrupt:
168
except Exception, ex:
177
for where, test in tests.err.iteritems():
179
print "ERROR %s: %s" % (teller, test)
182
for toolate, sec in tests.toolate.iteritems():
184
print "TOOLATE %s: %s (%s)" % (teller, toolate, sec)