-
Notifications
You must be signed in to change notification settings - Fork 2
/
OmniBot.py
131 lines (112 loc) · 3.77 KB
/
OmniBot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/python
#
# OmniBot main source file
# parse options to edit the Config object, start the threads for each
# protocol and logging thread
# OmniBot is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# OmniBot is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with OmniBot. If not, see <http://www.gnu.org/licenses/>.
import os
import sys
import re,time
import threading
import getopt
#import queue
sys.path.append(os.curdir + os.sep)
import OmniLib
import OmniLib.debug
import OmniLib.plugins
import OmniLib.plugins.PluginManager
import OmniLib.Auth
import OmniLib.Auth.users
import OmniLib.Comm
import OmniLib.Comm.IRC.irc
import OmniLib.Config
VERSION = "v0.1"
NO_CONTINUE = 1
debug = False
plugins_load = []
OmniLib.plugs = {}
OmniLib.Auth.user_db = {} # this is the user object dictionary users['username'].members
OmniLib.testing = False #obviously this is for the devel branch only! take it out for master
def parse_args(argv):
try:
options, therest = getopt.getopt(argv[1:], 'c:dvhtp', ['config=','debug', 'version', 'help', 'testing', 'plugin'])
for opt, arg in options:
if opt in ('-c', '--config'):
config_file = arg
elif opt in ('-d', '--debug'):
debug = True
elif opt in ('-v', '--version'):
print VERSION
sys.exit(0)
elif opt in ('-p', '--plugin'):
plugins_load=arg.split(',')
elif opt in ('-h', '--help'):
usage(argv[0])
elif opt in ('-t', '--testing'):
OmniLib.testing=True
except getopt.GetoptError:
usage(argv[0])
def usage(path):
print "Usage:"
print path + " [-v] [-c file] [-d]"
print "\t-v\t\t--version"
print "\t-c file\t\t--config file"
print "\t-d\t\t--debug"
print "\t-p\t\t--plugin plugin1,plugin2,plugin3"
print "\t-h\t\t--help"
sys.exit(-1)
#add more as we go along, extras should be plugins read from the command line args
def load_plugins(extras):
# for extra in extras
for e in extras: #load ext (external) plugins
OmniLib.plugs['ext'].append(OmniLib.plugins.PluginManager.LoadPlugins_ext(e))
OmniLib.plugs['main'] = OmniLib.plugins.PluginManager.LoadPlugins("Main")
OmniLib.plugs['irc'] = OmniLib.plugins.PluginManager.LoadPlugins("IRC")
if __name__ == "__main__":
# And so begins the main
OmniLib.editme="mooface"
# global OmniLib.plugs
OmniLib.debug.debug("[+] Initializing OmniBot!")
parse_args(sys.argv)
if (OmniLib.testing):
## SIMPLE TESTS - ignore && damn this is a crappy way to do this... Clean up this hackiness
print "Entering TEST mode"
load_plugins(plugins_load)
if(OmniLib.plugs['main'].__len__()> 0):
try:
for plugin in OmniLib.plugs['main']:
try:
plugin.main()
except:
print plugin.__name__ + " didnt work for main()"
except NO_CONTINUE:
pass
# here goes nothing...
global_queue = 'addme' # queue.Queue()
IRC_thread=OmniLib.Comm.IRC.irc.IRC(global_queue)
IRC_thread.start()
IRC_thread.join()
if (OmniLib.testing):
## SIMPLE TESTS - ignore && damn this is a crappy way to do this... Clean up this hackiness
OmniLib.debug.debug("Entering TEST mode")
CA=OmniLib.Auth.CentralAuth()
class Omni:
def funky(self):
self.moof='moo'
m=Omni()
m.funky()
OmniLib.plugins.PluginManager.PluginSync(Omni, plugin)
print m.moof
# m.funky()
m2=Omni()
m2.funky()
print OmniLib.editme