butler 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +4 -0
- data/GPL.txt +340 -0
- data/LICENSE.txt +52 -0
- data/README +37 -0
- data/Rakefile +334 -0
- data/bin/botcontrol +230 -0
- data/data/butler/config_template.yaml +4 -0
- data/data/butler/dialogs/backup.rb +19 -0
- data/data/butler/dialogs/botcontrol.rb +4 -0
- data/data/butler/dialogs/config.rb +1 -0
- data/data/butler/dialogs/create.rb +53 -0
- data/data/butler/dialogs/delete.rb +3 -0
- data/data/butler/dialogs/en/backup.yaml +6 -0
- data/data/butler/dialogs/en/botcontrol.yaml +5 -0
- data/data/butler/dialogs/en/create.yaml +11 -0
- data/data/butler/dialogs/en/delete.yaml +2 -0
- data/data/butler/dialogs/en/help.yaml +17 -0
- data/data/butler/dialogs/en/info.yaml +13 -0
- data/data/butler/dialogs/en/list.yaml +4 -0
- data/data/butler/dialogs/en/notyetimplemented.yaml +2 -0
- data/data/butler/dialogs/en/rename.yaml +3 -0
- data/data/butler/dialogs/en/start.yaml +3 -0
- data/data/butler/dialogs/en/sync_plugins.yaml +3 -0
- data/data/butler/dialogs/en/uninstall.yaml +5 -0
- data/data/butler/dialogs/en/unknown_command.yaml +2 -0
- data/data/butler/dialogs/help.rb +11 -0
- data/data/butler/dialogs/info.rb +27 -0
- data/data/butler/dialogs/interactive.rb +1 -0
- data/data/butler/dialogs/list.rb +10 -0
- data/data/butler/dialogs/notyetimplemented.rb +1 -0
- data/data/butler/dialogs/rename.rb +4 -0
- data/data/butler/dialogs/selectbot.rb +2 -0
- data/data/butler/dialogs/start.rb +5 -0
- data/data/butler/dialogs/sync_plugins.rb +30 -0
- data/data/butler/dialogs/uninstall.rb +17 -0
- data/data/butler/dialogs/unknown_command.rb +1 -0
- data/data/butler/plugins/core/logout.rb +41 -0
- data/data/butler/plugins/core/plugins.rb +134 -0
- data/data/butler/plugins/core/privilege.rb +103 -0
- data/data/butler/plugins/core/user.rb +166 -0
- data/data/butler/plugins/dev/eval.rb +64 -0
- data/data/butler/plugins/dev/nometa.rb +14 -0
- data/data/butler/plugins/dev/onhandlers.rb +93 -0
- data/data/butler/plugins/dev/raw.rb +36 -0
- data/data/butler/plugins/dev/rawlog.rb +77 -0
- data/data/butler/plugins/games/eightball.rb +54 -0
- data/data/butler/plugins/games/mastermind.rb +174 -0
- data/data/butler/plugins/irc/action.rb +36 -0
- data/data/butler/plugins/irc/join.rb +38 -0
- data/data/butler/plugins/irc/notice.rb +36 -0
- data/data/butler/plugins/irc/part.rb +38 -0
- data/data/butler/plugins/irc/privmsg.rb +36 -0
- data/data/butler/plugins/irc/quit.rb +36 -0
- data/data/butler/plugins/operator/deop.rb +41 -0
- data/data/butler/plugins/operator/devoice.rb +41 -0
- data/data/butler/plugins/operator/limit.rb +47 -0
- data/data/butler/plugins/operator/op.rb +41 -0
- data/data/butler/plugins/operator/voice.rb +41 -0
- data/data/butler/plugins/public/help.rb +69 -0
- data/data/butler/plugins/public/login.rb +72 -0
- data/data/butler/plugins/public/usage.rb +49 -0
- data/data/butler/plugins/service/clones.rb +56 -0
- data/data/butler/plugins/service/define.rb +47 -0
- data/data/butler/plugins/service/log.rb +183 -0
- data/data/butler/plugins/service/svn.rb +91 -0
- data/data/butler/plugins/util/cycle.rb +98 -0
- data/data/butler/plugins/util/load.rb +41 -0
- data/data/butler/plugins/util/pong.rb +29 -0
- data/data/butler/strings/random/acknowledge.en.yaml +5 -0
- data/data/butler/strings/random/gratitude.en.yaml +3 -0
- data/data/butler/strings/random/hello.en.yaml +4 -0
- data/data/butler/strings/random/ignorance.en.yaml +7 -0
- data/data/butler/strings/random/ignorance_about.en.yaml +3 -0
- data/data/butler/strings/random/insult.en.yaml +3 -0
- data/data/butler/strings/random/rejection.en.yaml +12 -0
- data/data/man/botcontrol.1 +17 -0
- data/lib/access.rb +187 -0
- data/lib/access/admin.rb +16 -0
- data/lib/access/privilege.rb +122 -0
- data/lib/access/role.rb +102 -0
- data/lib/access/savable.rb +18 -0
- data/lib/access/user.rb +180 -0
- data/lib/access/yamlbase.rb +126 -0
- data/lib/butler.rb +188 -0
- data/lib/butler/bot.rb +247 -0
- data/lib/butler/control.rb +93 -0
- data/lib/butler/dialog.rb +64 -0
- data/lib/butler/initialvalues.rb +40 -0
- data/lib/butler/irc/channel.rb +135 -0
- data/lib/butler/irc/channels.rb +96 -0
- data/lib/butler/irc/client.rb +351 -0
- data/lib/butler/irc/hostmask.rb +53 -0
- data/lib/butler/irc/message.rb +184 -0
- data/lib/butler/irc/parser.rb +125 -0
- data/lib/butler/irc/parser/commands.rb +83 -0
- data/lib/butler/irc/parser/generic.rb +343 -0
- data/lib/butler/irc/socket.rb +378 -0
- data/lib/butler/irc/string.rb +186 -0
- data/lib/butler/irc/topic.rb +15 -0
- data/lib/butler/irc/user.rb +265 -0
- data/lib/butler/irc/users.rb +112 -0
- data/lib/butler/plugin.rb +249 -0
- data/lib/butler/plugin/configproxy.rb +35 -0
- data/lib/butler/plugin/mapper.rb +85 -0
- data/lib/butler/plugin/matcher.rb +55 -0
- data/lib/butler/plugin/onhandlers.rb +70 -0
- data/lib/butler/plugin/trigger.rb +58 -0
- data/lib/butler/plugins.rb +147 -0
- data/lib/butler/version.rb +17 -0
- data/lib/cloptions.rb +217 -0
- data/lib/cloptions/adapters.rb +24 -0
- data/lib/cloptions/switch.rb +132 -0
- data/lib/configuration.rb +223 -0
- data/lib/dialogline.rb +296 -0
- data/lib/dialogline/localizations.rb +24 -0
- data/lib/durations.rb +57 -0
- data/lib/event.rb +295 -0
- data/lib/event/at.rb +64 -0
- data/lib/event/every.rb +56 -0
- data/lib/event/timed.rb +112 -0
- data/lib/installer.rb +75 -0
- data/lib/iterator.rb +34 -0
- data/lib/log.rb +68 -0
- data/lib/log/comfort.rb +85 -0
- data/lib/log/converter.rb +23 -0
- data/lib/log/entry.rb +152 -0
- data/lib/log/fakeio.rb +55 -0
- data/lib/log/file.rb +54 -0
- data/lib/log/filereader.rb +81 -0
- data/lib/log/forward.rb +49 -0
- data/lib/log/methods.rb +39 -0
- data/lib/log/nolog.rb +18 -0
- data/lib/log/splitter.rb +26 -0
- data/lib/ostructfixed.rb +26 -0
- data/lib/ruby/array/columnize.rb +38 -0
- data/lib/ruby/dir/mktree.rb +28 -0
- data/lib/ruby/enumerable/join.rb +13 -0
- data/lib/ruby/exception/detailed.rb +24 -0
- data/lib/ruby/file/append.rb +11 -0
- data/lib/ruby/file/write.rb +11 -0
- data/lib/ruby/hash/zip.rb +15 -0
- data/lib/ruby/kernel/bench.rb +15 -0
- data/lib/ruby/kernel/daemonize.rb +42 -0
- data/lib/ruby/kernel/non_verbose.rb +17 -0
- data/lib/ruby/kernel/safe_fork.rb +18 -0
- data/lib/ruby/range/stepped.rb +11 -0
- data/lib/ruby/string/arguments.rb +72 -0
- data/lib/ruby/string/chunks.rb +15 -0
- data/lib/ruby/string/post_arguments.rb +44 -0
- data/lib/ruby/string/unescaped.rb +17 -0
- data/lib/scheduler.rb +164 -0
- data/lib/scriptfile.rb +101 -0
- data/lib/templater.rb +86 -0
- data/test/cloptions.rb +134 -0
- data/test/cv.rb +28 -0
- data/test/irc/client.rb +85 -0
- data/test/irc/client_login.txt +53 -0
- data/test/irc/client_subscribe.txt +8 -0
- data/test/irc/message.rb +30 -0
- data/test/irc/messages.txt +64 -0
- data/test/irc/parser.rb +13 -0
- data/test/irc/profile_parser.rb +12 -0
- data/test/irc/users.rb +28 -0
- metadata +256 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
response(:context, "notyetimplemented", :feature => "Interactive Mode")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
say(:notyetimplemented)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
bots = variables.botname ? [variables.botname] : Butler.list(variables.path)
|
|
2
|
+
bots_path = variables.path.bots
|
|
3
|
+
dirlist = Dir[variables.path.plugin_repository+"/**/*"]
|
|
4
|
+
dirs, plugins = dirlist.partition { |filepath| File.directory?(filepath) }
|
|
5
|
+
slice = (variables.path.plugin_repository.length+1)..-1
|
|
6
|
+
dirs.map! { |dir| dir[slice] }
|
|
7
|
+
plugins.map! { |plugin| [plugin, plugin[slice], File.mtime(plugin)] }
|
|
8
|
+
|
|
9
|
+
bots.each { |name|
|
|
10
|
+
say(:updating, :name => name)
|
|
11
|
+
bot_path = "#{bots_path}/#{name}"
|
|
12
|
+
FileUtils.mkdir_p(dirs.map { |dir| "#{bot_path}/plugins/#{dir}" }, :mode => 0755)
|
|
13
|
+
plugins.each { |from, to, mtime|
|
|
14
|
+
full_to = "#{bot_path}/plugins/#{to}"
|
|
15
|
+
if File.exist?(full_to) then
|
|
16
|
+
if mtime > File.mtime(full_to) then
|
|
17
|
+
next unless prompt(:override_newer, true,
|
|
18
|
+
:name => to,
|
|
19
|
+
:a => File.mtime(full_to),
|
|
20
|
+
:b => mtime
|
|
21
|
+
)
|
|
22
|
+
end
|
|
23
|
+
#puts("Deleting #{full_to}")
|
|
24
|
+
File.delete(full_to)
|
|
25
|
+
end
|
|
26
|
+
#puts("Copying #{from} to #{full_to}")
|
|
27
|
+
FileUtils.cp(from, "#{full_to}")
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
unless ENV["SUDO_USER"]
|
|
2
|
+
say(:must_run_as_sudo)
|
|
3
|
+
else
|
|
4
|
+
variables.config.users.sort.each { |user, conf|
|
|
5
|
+
if prompt(:uninstall_user, false, :name => user) then
|
|
6
|
+
FileUtils.rm_r(conf[:bots])
|
|
7
|
+
FileUtils.rm_r(conf[:run])
|
|
8
|
+
end
|
|
9
|
+
}
|
|
10
|
+
if Butler::IsGem then
|
|
11
|
+
say(:run_gem_uninstall)
|
|
12
|
+
else
|
|
13
|
+
say(:uninstalling_botcontrol)
|
|
14
|
+
File.delete($0)
|
|
15
|
+
File.delete(variables.path.config)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
say(:unknown)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2007 by Stefan Rusterholz.
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
# See LICENSE.txt for permissions.
|
|
5
|
+
#++
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
trigger "logout"
|
|
10
|
+
|
|
11
|
+
def on_trigger
|
|
12
|
+
if @butler.access.default_user == @message.from.access then
|
|
13
|
+
answer(:not_logged_in)
|
|
14
|
+
else
|
|
15
|
+
@message.from.access = @butler.access.default_user
|
|
16
|
+
answer(:success)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
__END__
|
|
21
|
+
---
|
|
22
|
+
:revision:
|
|
23
|
+
:plugin: 1
|
|
24
|
+
:summary:
|
|
25
|
+
en: "Log out from the bot"
|
|
26
|
+
:about:
|
|
27
|
+
:mail: "apeiros@gmx.net"
|
|
28
|
+
:version: "1.0.0"
|
|
29
|
+
:author: "Stefan Rusterholz"
|
|
30
|
+
:strings:
|
|
31
|
+
:success:
|
|
32
|
+
en: "You are now logged out."
|
|
33
|
+
:not_logged_in:
|
|
34
|
+
en: "You are not logged in, can't log you out."
|
|
35
|
+
:usage:
|
|
36
|
+
en: "![b]logout![o]"
|
|
37
|
+
:help:
|
|
38
|
+
en:
|
|
39
|
+
"": |
|
|
40
|
+
Using 'logout' you can log out from the bot.
|
|
41
|
+
Use it in order to prevent other people from abusing your account while you are not on your computer.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2007 by Stefan Rusterholz.
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
# See LICENSE.txt for permissions.
|
|
5
|
+
#++
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
require 'ruby/array/columnize'
|
|
10
|
+
|
|
11
|
+
#trigger "plugins"
|
|
12
|
+
|
|
13
|
+
def on_load_plugin(param)
|
|
14
|
+
if plugin_name = @butler.plugins.identify(param.plugin_name) then
|
|
15
|
+
begin
|
|
16
|
+
@butler.plugins.load(plugin_name)
|
|
17
|
+
answer(:load, :plugin_name => plugin_name)
|
|
18
|
+
rescue Exception => e
|
|
19
|
+
exception(e)
|
|
20
|
+
answer(:exception_load, :plugin_name => plugin_name, :exception => e)
|
|
21
|
+
end
|
|
22
|
+
else
|
|
23
|
+
answer(:unknown, :plugin_name => param.plugin_name)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def on_unload_plugin(param)
|
|
28
|
+
if plugin_name = @butler.plugins.identify(param.plugin_name) then
|
|
29
|
+
begin
|
|
30
|
+
@butler.plugins.unload(plugin_name)
|
|
31
|
+
answer(:unload, :plugin_name => plugin_name)
|
|
32
|
+
rescue Exception => e
|
|
33
|
+
exception(e)
|
|
34
|
+
answer(:exception_unload, :plugin => plugin_name, :exception => e)
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
answer(:unknown, :plugin_name => param.plugin_name)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def on_list_plugins(param)
|
|
42
|
+
return answer(usage) unless %w(active inactive all).include?(param.which)
|
|
43
|
+
plugins = @butler.plugins.send(param.which).sort.columnize(5)
|
|
44
|
+
answer(param.which.to_sym, :plugins => plugins)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# 37
|
|
48
|
+
def on_trigger
|
|
49
|
+
case @message.arguments[1]
|
|
50
|
+
when nil
|
|
51
|
+
answer(usage)
|
|
52
|
+
|
|
53
|
+
when "groups"
|
|
54
|
+
return answer(unknown(2)) if @message.arguments[2]
|
|
55
|
+
groups = @butler.plugins.groups.sort.columnize(5)
|
|
56
|
+
answer(:groups, :groups => groups)
|
|
57
|
+
|
|
58
|
+
when "names"
|
|
59
|
+
return answer(unknown(2)) if @message.arguments[2]
|
|
60
|
+
names = @butler.plugins.all.sort.columnize(5)
|
|
61
|
+
answer(:names, :names => names)
|
|
62
|
+
|
|
63
|
+
when "active"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
else
|
|
67
|
+
unknown(1)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
__END__
|
|
72
|
+
---
|
|
73
|
+
:revision:
|
|
74
|
+
:plugin: 2
|
|
75
|
+
:summary:
|
|
76
|
+
en: Plugin management
|
|
77
|
+
:about:
|
|
78
|
+
:mail: "apeiros@gmx.net"
|
|
79
|
+
:version: "1.0.0"
|
|
80
|
+
:author: "Stefan Rusterholz"
|
|
81
|
+
:map:
|
|
82
|
+
:on_load_plugin:
|
|
83
|
+
en:
|
|
84
|
+
load plugin :plugin_name
|
|
85
|
+
:on_unload_plugin:
|
|
86
|
+
en:
|
|
87
|
+
unload plugin :plugin_name
|
|
88
|
+
:on_list_plugins:
|
|
89
|
+
en:
|
|
90
|
+
list :which plugins
|
|
91
|
+
:strings:
|
|
92
|
+
:groups:
|
|
93
|
+
en: |
|
|
94
|
+
Plugin-Groups:
|
|
95
|
+
<%= groups %>
|
|
96
|
+
:names:
|
|
97
|
+
en: |
|
|
98
|
+
Plugin-Names:
|
|
99
|
+
<%= groups %>
|
|
100
|
+
:active:
|
|
101
|
+
en: |
|
|
102
|
+
Active plugins:
|
|
103
|
+
<%= plugins %>
|
|
104
|
+
:inactive:
|
|
105
|
+
en: |
|
|
106
|
+
Inactive plugins:
|
|
107
|
+
<%= plugins %>
|
|
108
|
+
:all:
|
|
109
|
+
en: |
|
|
110
|
+
All plugins:
|
|
111
|
+
<%= plugins %>
|
|
112
|
+
:load:
|
|
113
|
+
en: Loaded '<%= plugin_name %>'.
|
|
114
|
+
:unload:
|
|
115
|
+
en: Unloaded '<%= plugin_name %>'.
|
|
116
|
+
:unknown:
|
|
117
|
+
en: Unknown plugin '<%= plugin_name %>'.
|
|
118
|
+
:exception_load:
|
|
119
|
+
en: |
|
|
120
|
+
An exception occured while loading '<%= plugin_name %>':
|
|
121
|
+
<%= exception %> in <%= exception.backtrace.first.sub(/.*?(lib|butler)/, '\1') %>
|
|
122
|
+
:exception_unload:
|
|
123
|
+
en: |
|
|
124
|
+
An exception occured while unloading '<%= plugin_name %>':
|
|
125
|
+
<%= exception %> in <%= exception.backtrace.first.sub(/.*?(lib|butler)/, '\1') %>
|
|
126
|
+
|
|
127
|
+
:usage:
|
|
128
|
+
en: |
|
|
129
|
+
'load plugin' ![c(blue)]name![o]
|
|
130
|
+
'unload plugin' ![c(blue)]name![o]
|
|
131
|
+
'list' [![c(blue)]type![o]] 'plugins'
|
|
132
|
+
:help:
|
|
133
|
+
en:
|
|
134
|
+
"": "Plugins is responsible for loading, unloading and listing available plugins."
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2007 by Stefan Rusterholz.
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
# See LICENSE.txt for permissions.
|
|
5
|
+
#++
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
trigger "privilege"
|
|
10
|
+
|
|
11
|
+
def on_trigger
|
|
12
|
+
case @message.arguments[1] && @message.arguments[1].downcase
|
|
13
|
+
when "create"
|
|
14
|
+
name, pass, active = @message.arguments[2,3]
|
|
15
|
+
active = active && !%(false off).include?(active.downcase)
|
|
16
|
+
return answer(usage) unless name and pass
|
|
17
|
+
if @butler.access.user.exists?(name) then
|
|
18
|
+
answer(:exists, :name => name)
|
|
19
|
+
else
|
|
20
|
+
@butler.access.user.create(name, pass, nil, false, :active => active)
|
|
21
|
+
answer(:created, :name => name)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
when "delete"
|
|
25
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
26
|
+
if @butler.access.user.exists?(name) then
|
|
27
|
+
@butler.access.user.delete(name)
|
|
28
|
+
answer(:deleted)
|
|
29
|
+
else
|
|
30
|
+
answer(:doesnt_exist, :name => name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
when "activate"
|
|
34
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
35
|
+
if @butler.access.user.exists?(name) then
|
|
36
|
+
@butler.access.user[name].activate
|
|
37
|
+
answer(:activated)
|
|
38
|
+
else
|
|
39
|
+
answer(:doesnt_exist, :name => name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
when "deactivate"
|
|
43
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
44
|
+
if @butler.access.user.exists?(name) then
|
|
45
|
+
@butler.access.user[name].deactivate
|
|
46
|
+
answer(:deactivated)
|
|
47
|
+
else
|
|
48
|
+
answer(:doesnt_exist, :name => name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
when "list"
|
|
52
|
+
answer(:users, :names => @butler.access.user.keys.columnize(5))
|
|
53
|
+
|
|
54
|
+
when "add"
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
when "remove"
|
|
58
|
+
|
|
59
|
+
else
|
|
60
|
+
answer(usage)
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
__END__
|
|
66
|
+
---
|
|
67
|
+
:revision:
|
|
68
|
+
:plugin: 1
|
|
69
|
+
:summary:
|
|
70
|
+
en: "Manage your users."
|
|
71
|
+
:about:
|
|
72
|
+
:mail: "apeiros@gmx.net"
|
|
73
|
+
:version: "1.0.0"
|
|
74
|
+
:author: "Stefan Rusterholz"
|
|
75
|
+
:strings:
|
|
76
|
+
:users:
|
|
77
|
+
en: |
|
|
78
|
+
Users:
|
|
79
|
+
<%= names %>
|
|
80
|
+
:created:
|
|
81
|
+
en: |
|
|
82
|
+
Created user <%= name %>.
|
|
83
|
+
:deleted:
|
|
84
|
+
en: |
|
|
85
|
+
Deleted user <%= name %>.
|
|
86
|
+
:activated:
|
|
87
|
+
en: |
|
|
88
|
+
Activated user <%= name %>.
|
|
89
|
+
:deactivated:
|
|
90
|
+
en: |
|
|
91
|
+
Deactivated user <%= name %>.
|
|
92
|
+
:exists:
|
|
93
|
+
en: |
|
|
94
|
+
User <%= name %> exists already.
|
|
95
|
+
:doesnt_exist:
|
|
96
|
+
en: |
|
|
97
|
+
User <%= name %> does not exist.
|
|
98
|
+
:usage:
|
|
99
|
+
en: "![b]user![o] ('create' name password ['active' | 'inactive'] | ('delete' | 'activate' | 'deactivate') username | ('add' | 'remove') privilege)"
|
|
100
|
+
:help:
|
|
101
|
+
en:
|
|
102
|
+
"": |
|
|
103
|
+
Manage your users.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# Copyright 2007 by Stefan Rusterholz.
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
# See LICENSE.txt for permissions.
|
|
5
|
+
#++
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
trigger "user"
|
|
10
|
+
|
|
11
|
+
def on_trigger
|
|
12
|
+
case arguments(1)
|
|
13
|
+
when "create"
|
|
14
|
+
name, pass, active = @message.arguments[2,3]
|
|
15
|
+
active = active && !%(false off).include?(active.downcase)
|
|
16
|
+
return answer(usage) unless name and pass
|
|
17
|
+
if @butler.access.user.exists?(name) then
|
|
18
|
+
answer(:exists, :name => name)
|
|
19
|
+
else
|
|
20
|
+
@butler.access.user.create(name, pass, nil, false, :active => active)
|
|
21
|
+
answer(:created, :name => name)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
when "delete"
|
|
25
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
26
|
+
if @butler.access.user.exists?(name) then
|
|
27
|
+
@butler.access.user.delete(name)
|
|
28
|
+
answer(:deleted)
|
|
29
|
+
else
|
|
30
|
+
answer(:doesnt_exist, :name => name)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
when "activate"
|
|
34
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
35
|
+
if @butler.access.user.exists?(name) then
|
|
36
|
+
@butler.access.user[name].activate
|
|
37
|
+
answer(:activated)
|
|
38
|
+
else
|
|
39
|
+
answer(:doesnt_exist, :name => name)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
when "deactivate"
|
|
43
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
44
|
+
if @butler.access.user.exists?(name) then
|
|
45
|
+
@butler.access.user[name].deactivate
|
|
46
|
+
answer(:deactivated)
|
|
47
|
+
else
|
|
48
|
+
answer(:doesnt_exist, :name => name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
when "list"
|
|
52
|
+
answer(:users, :names => @butler.access.user.keys.columnize(5))
|
|
53
|
+
|
|
54
|
+
when "privileges"
|
|
55
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
56
|
+
return answer(:doesnt_exist, :name => name) unless user = @butler.access.user[name]
|
|
57
|
+
answer(:privileges, :name => name, :privileges => user.privileges.list.keys.columnize(5))
|
|
58
|
+
|
|
59
|
+
when "roles"
|
|
60
|
+
return answer(usage) unless name = @message.arguments[2]
|
|
61
|
+
return answer(:doesnt_exist, :name => name) unless user = @butler.access.user[name]
|
|
62
|
+
answer(:roles, :name => name, :roles => user.roles.map { |r| r.id }.columnize(5))
|
|
63
|
+
|
|
64
|
+
when "add"
|
|
65
|
+
return answer(usage) unless name = @message.arguments[3] and @message.arguments[4]
|
|
66
|
+
return answer(:doesnt_exist, :name => name) unless user = @butler.access.user[name]
|
|
67
|
+
case arguments(2)
|
|
68
|
+
when "privilege"
|
|
69
|
+
user.privileges.add(@message.arguments[4])
|
|
70
|
+
answer(:added_privilege, :name => name, :privilege => @message.arguments[4])
|
|
71
|
+
|
|
72
|
+
when "role"
|
|
73
|
+
role_name = @message.arguments[4]
|
|
74
|
+
answer(:role_doesnt_exist, :role => role_name) unless role = @butler.access.role[role_name]
|
|
75
|
+
user.roles.add(role)
|
|
76
|
+
answer(:added_role, :name => name, :role => role_name)
|
|
77
|
+
|
|
78
|
+
else
|
|
79
|
+
answer(usage)
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
when "remove"
|
|
84
|
+
return answer(usage) unless name = @message.arguments[3] and @message.arguments[4]
|
|
85
|
+
return answer(:doesnt_exist, :name => name) unless user = @butler.access.user[name]
|
|
86
|
+
case arguments(2)
|
|
87
|
+
when "privilege"
|
|
88
|
+
user.privileges.remove(@message.arguments[4])
|
|
89
|
+
answer(:removed_privilege, :name => name, :privilege => @message.arguments[4])
|
|
90
|
+
|
|
91
|
+
when "role"
|
|
92
|
+
role_name = @message.arguments[4]
|
|
93
|
+
answer(:role_doesnt_exist, :role => role_name) unless role = @butler.access.role[role_name]
|
|
94
|
+
user.roles.remove(role)
|
|
95
|
+
answer(:removed_role, :name => name, :role => role_name)
|
|
96
|
+
|
|
97
|
+
else
|
|
98
|
+
answer(usage)
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
else
|
|
103
|
+
answer(usage)
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
__END__
|
|
109
|
+
---
|
|
110
|
+
:revision:
|
|
111
|
+
:plugin: 1
|
|
112
|
+
:summary:
|
|
113
|
+
en: "Manage your users."
|
|
114
|
+
:about:
|
|
115
|
+
:mail: "apeiros@gmx.net"
|
|
116
|
+
:version: "1.0.0"
|
|
117
|
+
:author: "Stefan Rusterholz"
|
|
118
|
+
:strings:
|
|
119
|
+
:exists:
|
|
120
|
+
en: |
|
|
121
|
+
User <%= name %> exists already.
|
|
122
|
+
:doesnt_exist:
|
|
123
|
+
en: |
|
|
124
|
+
User <%= name %> does not exist.
|
|
125
|
+
:users:
|
|
126
|
+
en: |
|
|
127
|
+
Users:
|
|
128
|
+
<%= names %>
|
|
129
|
+
:privileges:
|
|
130
|
+
en: |
|
|
131
|
+
Privileges of <%= name %>:
|
|
132
|
+
<%= privileges %>
|
|
133
|
+
:roles:
|
|
134
|
+
en: |
|
|
135
|
+
Roles of <%= name %>:
|
|
136
|
+
<%= roles %>
|
|
137
|
+
:created:
|
|
138
|
+
en: |
|
|
139
|
+
Created user <%= name %>.
|
|
140
|
+
:deleted:
|
|
141
|
+
en: |
|
|
142
|
+
Deleted user <%= name %>.
|
|
143
|
+
:activated:
|
|
144
|
+
en: |
|
|
145
|
+
Activated user <%= name %>.
|
|
146
|
+
:deactivated:
|
|
147
|
+
en: |
|
|
148
|
+
Deactivated user <%= name %>.
|
|
149
|
+
:added_privilege:
|
|
150
|
+
en: |
|
|
151
|
+
Added privilege <%= privilege %> to <%= name %>.
|
|
152
|
+
:removed_privilege:
|
|
153
|
+
en: |
|
|
154
|
+
Removed privilege <%= privilege %> from <%= name %>.
|
|
155
|
+
:added_role:
|
|
156
|
+
en: |
|
|
157
|
+
Added role <%= role %> to <%= name %>.
|
|
158
|
+
:removed_role:
|
|
159
|
+
en: |
|
|
160
|
+
Removed role <%= role %> from <%= name %>.
|
|
161
|
+
:usage:
|
|
162
|
+
en: "![b]user![o] ('create' name password ['active' | 'inactive'] | ('delete' | 'activate' | 'deactivate') username | ('add' | 'remove') privilege)"
|
|
163
|
+
:help:
|
|
164
|
+
en:
|
|
165
|
+
"": |
|
|
166
|
+
Manage your users.
|