]>
Commit | Line | Data |
---|---|---|
685e346e | 1 | from plugin import AcidPlugin |
c673741e | 2 | from plugin import modules, getPlugins |
685e346e A |
3 | from core import * |
4 | import time | |
5 | from istring import istring | |
6 | import os | |
7 | ||
8 | class control(AcidPlugin): | |
9 | def __init__(self): | |
10 | AcidPlugin.__init__(self) | |
11 | self.name = "control" | |
12 | self.control = config.get('control', 'nick') | |
13 | self.controlchannel = config.get('control', 'channel') | |
14 | ||
15 | def cmd_status(self, source, target, pieces): | |
16 | ||
17 | try: | |
18 | las = [str(x)[:4] for x in os.getloadavg()] | |
19 | except: | |
20 | las = ["unk", "unk", "unk"] | |
21 | ||
22 | self.inter.privmsg(self.control, target, "Load: [%s %s %s]" % (las[0], las[1], las[2])) | |
c673741e | 23 | self.inter.privmsg(self.control, target, "Modules loaded: %s" % (", ".join(getPlugins()))) |
685e346e A |
24 | return True |
25 | ||
26 | def cmd_help(self, source, target, pieces): | |
27 | """ | |
28 | Prints a list of commands and syntax a user is allowed to use | |
29 | TODO: change output to be more segregated: | |
30 | `help` should list modules | |
31 | `help <module>` should list help for that module | |
32 | `help all` should list all commands | |
33 | """ | |
34 | ||
35 | if len(pieces) == 0 or len(pieces) > 1: | |
36 | self.inter.notice(self.control, source, "Help is available for the following modules:") | |
37 | self.inter.notice(self.control, source, "help all") | |
38 | for k,v in modules.iteritems(): | |
39 | self.inter.notice(self.control, source, "help %s" % v.name) | |
40 | elif len(pieces) == 1: | |
41 | if pieces[0] == "all": | |
42 | filter = None | |
43 | else: | |
44 | filter = pieces[0] | |
45 | ||
46 | cmds = [] | |
47 | for modname in modules: | |
48 | mod = modules[modname] | |
49 | if mod.getCommands(): | |
50 | for name,info in mod.getCommands(): | |
51 | cmds.append([mod.name + '.' + name, info]) | |
52 | ||
53 | user = self.inter.findUser(source) | |
54 | for cmdname,cmdinfo in cmds: | |
55 | perm = cmdinfo['permission'] | |
56 | if not perm or user.hasFlags(perm): | |
57 | if not perm: | |
58 | perm = " " | |
59 | if not filter or filter == cmdname.split('.')[0]: | |
60 | self.inter.notice(self.control, source, "[%s] %s%s %s" % (perm, self.prefix, cmdname, cmdinfo['usage'])) | |
61 | ||
62 | self.inter.notice(self.control, source, "End of Help") | |
63 | return True | |
64 | ||
65 | def cmd_reload(self, source, target, pieces): | |
66 | ||
67 | try: | |
68 | config.read("config.ini") | |
69 | self.inter.notice(self.control, source, "Reloaded configuration") | |
70 | return True | |
71 | except Exception, err: | |
72 | self.log.error("Error reloading config.ini (%s)" % err) | |
73 | return False | |
74 | ||
75 | def getCommands(self): | |
76 | return ( | |
77 | ('status', { | |
78 | 'permission':'', | |
79 | 'callback':self.cmd_status, | |
80 | 'usage':"- display technical information"}), | |
81 | ||
82 | ('help', { | |
83 | 'permission':'', | |
84 | 'callback':self.cmd_help, | |
85 | 'usage':"- shows help for all commands available *to you*"}), | |
86 | ||
87 | ('reload', { | |
88 | 'permission':'r', | |
89 | 'callback':self.cmd_reload, | |
90 | 'usage':"- reloads certain configuration parameters"}), | |
91 | ) | |
92 | ||
93 | def onPrivmsg(self, creator, recipient, message): | |
94 | params = message.split(' ') | |
95 | user = self.inter.findUser(creator) | |
96 | ||
97 | if not user or len(params) == 0 or len(params[0]) == 0 or params[0][0] != self.prefix or recipient != self.controlchannel: | |
98 | return | |
99 | ||
100 | cmd = params[0][1:] | |
101 | ||
102 | for modname in modules: | |
103 | mod = modules[modname] | |
104 | if not mod.getCommands(): | |
105 | continue | |
106 | for cmdname, info in mod.getCommands(): | |
107 | if mod.name + '.' + cmdname == cmd and (not info['permission'] or user.hasFlags(info['permission'])): | |
108 | try: | |
109 | try: | |
110 | msg = params[1:] | |
111 | except: | |
112 | msg = None | |
113 | ||
114 | if not info['callback'](creator, recipient, msg): | |
115 | self.inter.notice(self.control, creator, "Usage: %s%s %s" % (self.prefix, cmd, info['usage'])) | |
116 | except Exception, err: | |
117 | self.log.error('COMMAND: Error executing %s (%s)' % (cmd, err)) | |
118 | import traceback | |
119 | traceback.print_exc() | |
2e536ca7 | 120 | raise |