rbot 0.9.9
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/AUTHORS +16 -0
- data/COPYING +21 -0
- data/ChangeLog +418 -0
- data/INSTALL +8 -0
- data/README +44 -0
- data/REQUIREMENTS +34 -0
- data/TODO +5 -0
- data/Usage_en.txt +129 -0
- data/bin/rbot +81 -0
- data/data/rbot/contrib/plugins/figlet.rb +20 -0
- data/data/rbot/contrib/plugins/ri.rb +83 -0
- data/data/rbot/contrib/plugins/stats.rb +232 -0
- data/data/rbot/contrib/plugins/vandale.rb +49 -0
- data/data/rbot/languages/dutch.lang +73 -0
- data/data/rbot/languages/english.lang +75 -0
- data/data/rbot/languages/french.lang +39 -0
- data/data/rbot/languages/german.lang +67 -0
- data/data/rbot/plugins/autoop.rb +68 -0
- data/data/rbot/plugins/autorejoin.rb +16 -0
- data/data/rbot/plugins/cal.rb +15 -0
- data/data/rbot/plugins/dice.rb +81 -0
- data/data/rbot/plugins/eightball.rb +19 -0
- data/data/rbot/plugins/excuse.rb +470 -0
- data/data/rbot/plugins/fish.rb +61 -0
- data/data/rbot/plugins/fortune.rb +22 -0
- data/data/rbot/plugins/freshmeat.rb +98 -0
- data/data/rbot/plugins/google.rb +51 -0
- data/data/rbot/plugins/host.rb +14 -0
- data/data/rbot/plugins/httpd.rb.disabled +35 -0
- data/data/rbot/plugins/insult.rb +258 -0
- data/data/rbot/plugins/karma.rb +85 -0
- data/data/rbot/plugins/lart.rb +181 -0
- data/data/rbot/plugins/math.rb +122 -0
- data/data/rbot/plugins/nickserv.rb +89 -0
- data/data/rbot/plugins/nslookup.rb +43 -0
- data/data/rbot/plugins/opme.rb +19 -0
- data/data/rbot/plugins/quakeauth.rb +51 -0
- data/data/rbot/plugins/quotes.rb +321 -0
- data/data/rbot/plugins/remind.rb +228 -0
- data/data/rbot/plugins/roshambo.rb +54 -0
- data/data/rbot/plugins/rot13.rb +10 -0
- data/data/rbot/plugins/roulette.rb +147 -0
- data/data/rbot/plugins/rss.rb.disabled +414 -0
- data/data/rbot/plugins/seen.rb +89 -0
- data/data/rbot/plugins/slashdot.rb +94 -0
- data/data/rbot/plugins/spell.rb +36 -0
- data/data/rbot/plugins/tube.rb +71 -0
- data/data/rbot/plugins/url.rb +88 -0
- data/data/rbot/plugins/weather.rb +649 -0
- data/data/rbot/plugins/wserver.rb +71 -0
- data/data/rbot/plugins/xmlrpc.rb.disabled +52 -0
- data/data/rbot/templates/keywords.rbot +4 -0
- data/data/rbot/templates/lart/larts +98 -0
- data/data/rbot/templates/lart/praises +5 -0
- data/data/rbot/templates/levels.rbot +30 -0
- data/data/rbot/templates/users.rbot +1 -0
- data/lib/rbot/auth.rb +203 -0
- data/lib/rbot/channel.rb +54 -0
- data/lib/rbot/config.rb +363 -0
- data/lib/rbot/dbhash.rb +112 -0
- data/lib/rbot/httputil.rb +141 -0
- data/lib/rbot/ircbot.rb +808 -0
- data/lib/rbot/ircsocket.rb +185 -0
- data/lib/rbot/keywords.rb +433 -0
- data/lib/rbot/language.rb +69 -0
- data/lib/rbot/message.rb +256 -0
- data/lib/rbot/messagemapper.rb +262 -0
- data/lib/rbot/plugins.rb +291 -0
- data/lib/rbot/post-install.rb +8 -0
- data/lib/rbot/rbotconfig.rb +36 -0
- data/lib/rbot/registry.rb +271 -0
- data/lib/rbot/rfc2812.rb +1104 -0
- data/lib/rbot/timer.rb +201 -0
- data/lib/rbot/utils.rb +83 -0
- data/setup.rb +1360 -0
- metadata +129 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
Net::HTTP.version_1_2
|
4
|
+
|
5
|
+
class WserverPlugin < Plugin
|
6
|
+
def help(plugin, topic="")
|
7
|
+
"wserver <uri> => try and determine what webserver <uri> is using"
|
8
|
+
end
|
9
|
+
|
10
|
+
def wserver(m, params)
|
11
|
+
redirect_count = 0
|
12
|
+
hostname = params[:host].dup
|
13
|
+
hostname = "http://#{hostname}" unless hostname =~ /:\/\//
|
14
|
+
begin
|
15
|
+
if(redirect_count > 3)
|
16
|
+
m.reply "cowardly refusing to follow more than 3 redirects"
|
17
|
+
return
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
uri = URI.parse(hostname)
|
22
|
+
rescue URI::InvalidURIError => err
|
23
|
+
m.reply "#{hostname} is not a valid URI"
|
24
|
+
return
|
25
|
+
end
|
26
|
+
|
27
|
+
unless(uri)
|
28
|
+
m.reply "incorrect usage: " + help(m.plugin)
|
29
|
+
return
|
30
|
+
end
|
31
|
+
|
32
|
+
http = @bot.httputil.get_proxy(uri)
|
33
|
+
http.open_timeout = 5
|
34
|
+
|
35
|
+
http.start {|http|
|
36
|
+
resp = http.head('/')
|
37
|
+
server = resp['Server']
|
38
|
+
if(server && server.length > 0)
|
39
|
+
m.reply "#{uri.host} is running #{server}"
|
40
|
+
else
|
41
|
+
m.reply "couldn't tell what #{uri.host} is running"
|
42
|
+
end
|
43
|
+
|
44
|
+
if(resp.code == "302" || resp.code == "301")
|
45
|
+
newloc = resp['location']
|
46
|
+
newuri = URI.parse(newloc)
|
47
|
+
# detect and ignore incorrect redirects (to relative paths etc)
|
48
|
+
if (newuri.host != nil)
|
49
|
+
if(uri.host != newuri.host)
|
50
|
+
m.reply "#{uri.host} redirects to #{newuri.scheme}://#{newuri.host}"
|
51
|
+
raise resp['location']
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
}
|
56
|
+
rescue TimeoutError => err
|
57
|
+
m.reply "timed out connecting to #{uri.host}:#{uri.port} :("
|
58
|
+
return
|
59
|
+
rescue RuntimeError => err
|
60
|
+
redirect_count += 1
|
61
|
+
hostname = err.message
|
62
|
+
retry
|
63
|
+
rescue StandardError => err
|
64
|
+
puts err
|
65
|
+
m.reply "couldn't connect to #{uri.host}:#{uri.port} :("
|
66
|
+
return
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
plugin = WserverPlugin.new
|
71
|
+
plugin.map 'wserver :host'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "xmlrpc/server"
|
2
|
+
|
3
|
+
class XmlRpcPlugin < Plugin
|
4
|
+
|
5
|
+
def port
|
6
|
+
@port = 8083
|
7
|
+
end
|
8
|
+
|
9
|
+
INTERFACE = XMLRPC::interface("rbot") {
|
10
|
+
meth 'string say(string)', 'Speak into the current channel', 'say'
|
11
|
+
}
|
12
|
+
|
13
|
+
def xmlrpc
|
14
|
+
@xmlrpc
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@xmlrpc = Thread.new {
|
19
|
+
@server = XMLRPC::Server.new(port)
|
20
|
+
@server.add_handler(XmlRpcPlugin::INTERFACE, self)
|
21
|
+
@server.serve
|
22
|
+
puts "here"
|
23
|
+
}
|
24
|
+
|
25
|
+
super()
|
26
|
+
end
|
27
|
+
|
28
|
+
def cleanup
|
29
|
+
puts "killing"
|
30
|
+
@server.shutdown
|
31
|
+
xmlrpc.kill
|
32
|
+
xmlrpc.join
|
33
|
+
end
|
34
|
+
|
35
|
+
def help(plugin, topic="")
|
36
|
+
"xmlrpc runs on port {#port}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def say(msg)
|
40
|
+
m.reply msg
|
41
|
+
msg
|
42
|
+
end
|
43
|
+
|
44
|
+
def privmsg(m)
|
45
|
+
m.reply help(m.plugin)
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
plugin = XmlRpcPlugin.new
|
51
|
+
plugin.register("xmlrpc")
|
52
|
+
plugin.xmlrpc.run
|
@@ -0,0 +1,98 @@
|
|
1
|
+
swaps <who>'s shampoo with nair
|
2
|
+
installs windows on <who>'s machine
|
3
|
+
forces <who> to use perl for 3 weeks
|
4
|
+
registers <who>'s name with 50 known spammers
|
5
|
+
resizes <who>'s terminal to 40x24
|
6
|
+
takes <who>'s tea
|
7
|
+
dispenses <who>'s email address to a few hundred 'bulk mailing services'
|
8
|
+
pokes <who> in the eye
|
9
|
+
beats <who> senseless with a 50lb Unix manual
|
10
|
+
cats /dev/urandom into <who>'s ear
|
11
|
+
signs <who> up for AOL
|
12
|
+
enrolls <who> in Visual Basic 101
|
13
|
+
sporks <who>
|
14
|
+
drops a truckload of VAXen on <who>
|
15
|
+
judo chops <who>
|
16
|
+
resizes <who>'s terminal to 40x24
|
17
|
+
formats <who>'s harddrive to fat12
|
18
|
+
rm -rf's <who>
|
19
|
+
stabs <who>
|
20
|
+
steals <who>'s mojo
|
21
|
+
strangles <who> with a doohicky mouse cord
|
22
|
+
whacks <who> with the cluebat
|
23
|
+
sells <who> on E-Bay
|
24
|
+
uses <who> as a biological warfare study
|
25
|
+
uses the "Customer Appreciation Bat" on <who>
|
26
|
+
reads <who> some vogon poetry
|
27
|
+
puts <who> in the Total Perspective Vortex
|
28
|
+
casts <who> into the fires of Mt. Doom
|
29
|
+
gives <who> a melvin
|
30
|
+
turns over <who> to Agent Smith to be "bugged"
|
31
|
+
takes away <who>'s internet connection
|
32
|
+
pushes <who> past the Shoe Event Horizon
|
33
|
+
counts "1, 2, 5... er... 3!" and hurls the Holy Handgrenade Of Antioch at <who>
|
34
|
+
puts <who> in a nest of camel spiders
|
35
|
+
makes <who> read slashdot at -1
|
36
|
+
puts "alias vim=emacs" in <who>'s /etc/profile
|
37
|
+
uninstalls ld from <who>'s system
|
38
|
+
locks <who> in the Chateau d'If
|
39
|
+
signs <who> up for getting hit on the head lessons
|
40
|
+
makes <who> try to set up a Lexmark printer
|
41
|
+
fills <who>'s Visene eyedrop bottle with lime juice
|
42
|
+
casts <who> into the fires of Mt. Doom.
|
43
|
+
gives <who> a Chicago Steamer
|
44
|
+
rips off <who>'s arm, and uses it to beat them to death
|
45
|
+
pierces <who>'s nose with a rusty paper hole puncher
|
46
|
+
pokes <who> with a rusty nail
|
47
|
+
puts sugar between <who>'s bedsheets
|
48
|
+
pours sand into <who>'s oatmeal
|
49
|
+
mixes epoxy into <who>'s toothpaste
|
50
|
+
puts Icy-Hot in <who>'s lip balm
|
51
|
+
straps <who> to a chair, and plays a endless low bitrate MP3 loop of "the world's most annoying sound" from "Dumb and Dumber"
|
52
|
+
tells Dr. Dre that <who> was talking smack
|
53
|
+
forces <who> to use a Commodore 64 for all their word processing
|
54
|
+
smacks <who> in the face with a burlap sack full of broken glass
|
55
|
+
puts <who> in a room with several heavily armed manic depressives
|
56
|
+
makes <who> watch reruns of "Blue's Clues"
|
57
|
+
puts lye in <who>'s coffee
|
58
|
+
tattoos the Windows symbol on <who>'s ass
|
59
|
+
lets Borg have his way with <who>
|
60
|
+
signs <who> up for line dancing classes at the local senior center
|
61
|
+
wakes <who> out of a sound sleep with some brand new nipple piercings
|
62
|
+
gives <who> a 2 guage Prince Albert
|
63
|
+
forces <who> to eat all their veggies
|
64
|
+
covers <who>'s toilet paper with lemon-pepper
|
65
|
+
fills <who>'s ketchup bottle with Dave's Insanity sauce
|
66
|
+
forces <who> to stare at an incredibly frustrating and seemingly neverending IRC political debate
|
67
|
+
knocks two of <who>'s teeth out with a 2x4
|
68
|
+
removes debian from <who>'s system
|
69
|
+
uses <who>'s debian cds for skeet shooting practice
|
70
|
+
gives <who>'s phone number to Borg
|
71
|
+
posts <who>'s IP and root password on alt.2600
|
72
|
+
forces <who> to use words like "irregardless" and "administrate" (thereby sounding like a real dumbass)"
|
73
|
+
tickles <who> until they wet their pants and pass out
|
74
|
+
replaces <who>'s KY with elmer's clear wood glue
|
75
|
+
replaces <who>'s TUMS with alka-seltzer tablets
|
76
|
+
squeezes habanero pepper juice into <who>'s tub of vaseline for <who>
|
77
|
+
submits <who>'s photo to the people at SA for photoshopping
|
78
|
+
Forces <who> to learn the Win32 API
|
79
|
+
gives <who> an atomic wedgie
|
80
|
+
ties <who> to a chair and forces them to listen to 'N Sync at full blast
|
81
|
+
forces <who> to use emacs for text editing
|
82
|
+
frowns at <who> really really hard
|
83
|
+
jabs a hot car lighter into <who>'s eye sockets
|
84
|
+
forces <who> to browse the web with IE
|
85
|
+
takes <who> out at the knees with a broken pool cue
|
86
|
+
forces <who> to listen to only emo music
|
87
|
+
signs <who> up for the Iowa State Ferret Legging Championship
|
88
|
+
attempts to hotswap <who>'s RAM
|
89
|
+
donkey punches <who>
|
90
|
+
puts track spikes into <who>'s side
|
91
|
+
replaces <who>'s Astroglide with JB Weld
|
92
|
+
replaces <who>'s hypertension pills with rat poison pellets
|
93
|
+
replaces <who>s jock itch cream with Nair
|
94
|
+
does the Australian Death Grip on <who>
|
95
|
+
dances upon the grave of <who>'s ancestors.
|
96
|
+
farts in <who>'s general direction
|
97
|
+
flogs <who> with stinging neddle
|
98
|
+
hands <who> a poison ivy joint
|
@@ -0,0 +1,30 @@
|
|
1
|
+
100 auth
|
2
|
+
90 quit
|
3
|
+
90 restart
|
4
|
+
85 config
|
5
|
+
80 nick
|
6
|
+
80 nickserv
|
7
|
+
80 qauth
|
8
|
+
80 http
|
9
|
+
70 opme
|
10
|
+
70 mode
|
11
|
+
70 say
|
12
|
+
70 action
|
13
|
+
40 quiet
|
14
|
+
40 talk
|
15
|
+
50 part
|
16
|
+
50 hide
|
17
|
+
50 join
|
18
|
+
15 delquote
|
19
|
+
12 msginsult
|
20
|
+
12 remind_other
|
21
|
+
5 rmlart
|
22
|
+
5 rmpraise
|
23
|
+
5 keycmd
|
24
|
+
5 lart
|
25
|
+
5 addlart
|
26
|
+
5 addpraise
|
27
|
+
5 remind
|
28
|
+
5 keyword
|
29
|
+
5 addquote
|
30
|
+
5 getquote
|
@@ -0,0 +1 @@
|
|
1
|
+
10 *!*@*
|
data/lib/rbot/auth.rb
ADDED
@@ -0,0 +1,203 @@
|
|
1
|
+
module Irc
|
2
|
+
|
3
|
+
# globmask:: glob to test with
|
4
|
+
# netmask:: netmask to test against
|
5
|
+
# Compare a netmask with a standard IRC glob, e.g foo!bar@baz.com would
|
6
|
+
# match *!*@baz.com, foo!*@*, *!bar@*, etc.
|
7
|
+
def Irc.netmaskmatch(globmask, netmask)
|
8
|
+
regmask = globmask.gsub(/\*/, ".*?")
|
9
|
+
return true if(netmask =~ /#{regmask}/)
|
10
|
+
return false
|
11
|
+
end
|
12
|
+
|
13
|
+
# check if a string is an actual IRC hostmask
|
14
|
+
def Irc.ismask(mask)
|
15
|
+
mask =~ /^.+!.+@.+$/
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# User-level authentication to allow/disallow access to bot commands based
|
20
|
+
# on hostmask and userlevel.
|
21
|
+
class IrcAuth
|
22
|
+
BotConfig.register BotConfigStringValue.new('auth.password',
|
23
|
+
:default => "rbotauth", :wizard => true,
|
24
|
+
:desc => "Your password for maxing your auth with the bot (used to associate new hostmasks with your owner-status etc)")
|
25
|
+
|
26
|
+
# create a new IrcAuth instance.
|
27
|
+
# bot:: associated bot class
|
28
|
+
def initialize(bot)
|
29
|
+
@bot = bot
|
30
|
+
@users = Hash.new(0)
|
31
|
+
@levels = Hash.new(0)
|
32
|
+
if(File.exist?("#{@bot.botclass}/users.rbot"))
|
33
|
+
IO.foreach("#{@bot.botclass}/users.rbot") do |line|
|
34
|
+
if(line =~ /\s*(\d+)\s*(\S+)/)
|
35
|
+
level = $1.to_i
|
36
|
+
mask = $2
|
37
|
+
@users[mask] = level
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
if(File.exist?("#{@bot.botclass}/levels.rbot"))
|
42
|
+
IO.foreach("#{@bot.botclass}/levels.rbot") do |line|
|
43
|
+
if(line =~ /\s*(\d+)\s*(\S+)/)
|
44
|
+
level = $1.to_i
|
45
|
+
command = $2
|
46
|
+
@levels[command] = level
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# save current users and levels to files.
|
53
|
+
# levels are written to #{botclass}/levels.rbot
|
54
|
+
# users are written to #{botclass}/users.rbot
|
55
|
+
def save
|
56
|
+
Dir.mkdir("#{@bot.botclass}") if(!File.exist?("#{@bot.botclass}"))
|
57
|
+
File.open("#{@bot.botclass}/users.rbot", "w") do |file|
|
58
|
+
@users.each do |key, value|
|
59
|
+
file.puts "#{value} #{key}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
File.open("#{@bot.botclass}/levels.rbot", "w") do |file|
|
63
|
+
@levels.each do |key, value|
|
64
|
+
file.puts "#{value} #{key}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# command:: command user wishes to perform
|
70
|
+
# mask:: hostmask of user
|
71
|
+
# tell:: optional recipient for "insufficient auth" message
|
72
|
+
#
|
73
|
+
# returns true if user with hostmask +mask+ is permitted to perform
|
74
|
+
# +command+ optionally pass tell as the target for the "insufficient auth"
|
75
|
+
# message, if the user is not authorised
|
76
|
+
def allow?(command, mask, tell=nil)
|
77
|
+
auth = userlevel(mask)
|
78
|
+
if(auth >= @levels[command])
|
79
|
+
return true
|
80
|
+
else
|
81
|
+
debug "#{mask} is not allowed to perform #{command}"
|
82
|
+
@bot.say tell, "insufficient \"#{command}\" auth (have #{auth}, need #{@levels[command]})" if tell
|
83
|
+
return false
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# add user with hostmask matching +mask+ with initial auth level +level+
|
88
|
+
def useradd(mask, level)
|
89
|
+
if(Irc.ismask(mask))
|
90
|
+
@users[mask] = level
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# mask:: mask of user to remove
|
95
|
+
# remove user with mask +mask+
|
96
|
+
def userdel(mask)
|
97
|
+
if(Irc.ismask(mask))
|
98
|
+
@users.delete(mask)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# command:: command to adjust
|
103
|
+
# level:: new auth level for the command
|
104
|
+
# set required auth level of +command+ to +level+
|
105
|
+
def setlevel(command, level)
|
106
|
+
@levels[command] = level
|
107
|
+
end
|
108
|
+
|
109
|
+
# specific users.
|
110
|
+
# mask:: mask of user
|
111
|
+
# returns the authlevel of user with mask +mask+
|
112
|
+
# finds the matching user which has the highest authlevel (so you can have
|
113
|
+
# a default level of 5 for *!*@*, and yet still give higher levels to
|
114
|
+
def userlevel(mask)
|
115
|
+
# go through hostmask list, find match with _highest_ level (all users
|
116
|
+
# will match *!*@*)
|
117
|
+
level = 0
|
118
|
+
@users.each {|user,userlevel|
|
119
|
+
if(Irc.netmaskmatch(user, mask))
|
120
|
+
level = userlevel if userlevel > level
|
121
|
+
end
|
122
|
+
}
|
123
|
+
level
|
124
|
+
end
|
125
|
+
|
126
|
+
# return all currently defined commands (for which auth is required) and
|
127
|
+
# their required authlevels
|
128
|
+
def showlevels
|
129
|
+
reply = "Current levels are:"
|
130
|
+
@levels.sort.each {|a|
|
131
|
+
key = a[0]
|
132
|
+
value = a[1]
|
133
|
+
reply += " #{key}(#{value})"
|
134
|
+
}
|
135
|
+
reply
|
136
|
+
end
|
137
|
+
|
138
|
+
# return all currently defined users and their authlevels
|
139
|
+
def showusers
|
140
|
+
reply = "Current users are:"
|
141
|
+
@users.sort.each {|a|
|
142
|
+
key = a[0]
|
143
|
+
value = a[1]
|
144
|
+
reply += " #{key}(#{value})"
|
145
|
+
}
|
146
|
+
reply
|
147
|
+
end
|
148
|
+
|
149
|
+
# module help
|
150
|
+
def help(topic="")
|
151
|
+
case topic
|
152
|
+
when "setlevel"
|
153
|
+
return "setlevel <command> <level> => Sets required level for <command> to <level> (private addressing only)"
|
154
|
+
when "useradd"
|
155
|
+
return "useradd <mask> <level> => Add user <mask> at level <level> (private addressing only)"
|
156
|
+
when "userdel"
|
157
|
+
return "userdel <mask> => Remove user <mask> (private addressing only)"
|
158
|
+
when "auth"
|
159
|
+
return "auth <masterpw> => Recognise your hostmask as bot master (private addressing only)"
|
160
|
+
when "levels"
|
161
|
+
return "levels => list commands and their required levels (private addressing only)"
|
162
|
+
when "users"
|
163
|
+
return "users => list users and their levels (private addressing only)"
|
164
|
+
else
|
165
|
+
return "Auth module (User authentication) topics: setlevel, useradd, userdel, auth, levels, users"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# privmsg handler
|
170
|
+
def privmsg(m)
|
171
|
+
if(m.address? && m.private?)
|
172
|
+
case m.message
|
173
|
+
when (/^setlevel\s+(\S+)\s+(\d+)$/)
|
174
|
+
if(@bot.auth.allow?("auth", m.source, m.replyto))
|
175
|
+
@bot.auth.setlevel($1, $2.to_i)
|
176
|
+
m.reply "level for #$1 set to #$2"
|
177
|
+
end
|
178
|
+
when (/^useradd\s+(\S+)\s+(\d+)/)
|
179
|
+
if(@bot.auth.allow?("auth", m.source, m.replyto))
|
180
|
+
@bot.auth.useradd($1, $2.to_i)
|
181
|
+
m.reply "added user #$1 at level #$2"
|
182
|
+
end
|
183
|
+
when (/^userdel\s+(\S+)/)
|
184
|
+
if(@bot.auth.allow?("auth", m.source, m.replyto))
|
185
|
+
@bot.auth.userdel($1)
|
186
|
+
m.reply "user #$1 is gone"
|
187
|
+
end
|
188
|
+
when (/^auth\s+(\S+)/)
|
189
|
+
if($1 == @bot.config["auth.password"])
|
190
|
+
@bot.auth.useradd(Regexp.escape(m.source), 1000)
|
191
|
+
m.reply "Identified, security level maxed out"
|
192
|
+
else
|
193
|
+
m.reply "incorrect password"
|
194
|
+
end
|
195
|
+
when ("levels")
|
196
|
+
m.reply @bot.auth.showlevels if(@bot.auth.allow?("config", m.source, m.replyto))
|
197
|
+
when ("users")
|
198
|
+
m.reply @bot.auth.showusers if(@bot.auth.allow?("config", m.source, m.replyto))
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|