jabber-bot 1.2.0 → 1.3.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/HISTORY +3 -0
- data/LICENSE +1 -1
- data/README.rdoc +3 -3
- data/lib/jabber/bot.rb +35 -24
- metadata +4 -4
data/HISTORY
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
Jabber::Bot Release History
|
2
2
|
|
3
|
+
Version 1.3.0 (15 May 2011)
|
4
|
+
* Allow multiple parameters for bot commands. (v0n)
|
5
|
+
|
3
6
|
Version 1.2.0 (23 April 2011)
|
4
7
|
* Optionally specify a startup message. (nstielau)
|
5
8
|
* Optionally disable the misunderstood command reply. (nstielau)
|
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -6,7 +6,7 @@ Jabber::Bot makes it simple to create and command your own Jabber bot. Bots
|
|
6
6
|
are created by defining commands powered by regular expressions and Ruby.
|
7
7
|
|
8
8
|
*Author*:: Brett Stimmerman (mailto:brettstimmerman@gmail.com)
|
9
|
-
*Version*:: 1.
|
9
|
+
*Version*:: 1.3.0 (2011-05-15)
|
10
10
|
*Copyright*:: Copyright (c) 2011 Brett Stimmerman. All rights reserved.
|
11
11
|
*License*:: New BSD License (http://opensource.org/licenses/bsd-license.php)
|
12
12
|
*Website*:: http://github.com/brettstimmerman/jabber-bot
|
@@ -43,8 +43,8 @@ are created by defining commands powered by regular expressions and Ruby.
|
|
43
43
|
bot.add_command(
|
44
44
|
:syntax => 'puts <string>',
|
45
45
|
:description => 'Write something to $stdout',
|
46
|
-
:regex => /^puts\s
|
47
|
-
:alias => [ :alias => 'p <string>', :regex => /^p\s
|
46
|
+
:regex => /^puts\s+(.+)$/,
|
47
|
+
:alias => [ :alias => 'p <string>', :regex => /^p\s+(.+)$/ ],
|
48
48
|
:is_public => true
|
49
49
|
) do |sender, message|
|
50
50
|
puts "#{sender} says '#{message}'"
|
data/lib/jabber/bot.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c)
|
2
|
+
# Copyright (c) 2011 Brett Stimmerman <brettstimmerman@gmail.com>
|
3
3
|
# All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
@@ -82,7 +82,7 @@ module Jabber
|
|
82
82
|
|
83
83
|
@config[:is_public] ||= false
|
84
84
|
|
85
|
-
if @config[:name].nil?
|
85
|
+
if @config[:name].nil? || @config[:name].length == 0
|
86
86
|
@config[:name] = @config[:jabber_id].sub(/@.+$/, '')
|
87
87
|
end
|
88
88
|
|
@@ -113,6 +113,14 @@ module Jabber
|
|
113
113
|
# the builtin 'help' command, and a regular expression (+regex+) to detect
|
114
114
|
# the presence of the command in an incoming message.
|
115
115
|
#
|
116
|
+
# The command parameter(s) will be parsed from group(s) (text between
|
117
|
+
# parenthesis) in the +regex+. If there's none, one, or more than one
|
118
|
+
# occurrence, the callback block will receive respectively nil, a String,
|
119
|
+
# or an Array.
|
120
|
+
# e.g. With a command defined like this: /^cmd\s+(.+)\s+(.+)\s+(.+)$/,
|
121
|
+
# writing "cmd foo bar 42" will send ["foo", "bar", "42"] to the callback
|
122
|
+
# block.
|
123
|
+
#
|
116
124
|
# The metadata Hash may optionally contain an array of command aliases. An
|
117
125
|
# +alias+ consists of an alias +syntax+ and +regex+. Aliases allow the bot
|
118
126
|
# to understand command shorthands. For example, the default 'help' command
|
@@ -126,8 +134,8 @@ module Jabber
|
|
126
134
|
#
|
127
135
|
# The specified callback block will be triggered when the bot receives a
|
128
136
|
# message that matches the given command regex (or an alias regex). The
|
129
|
-
# callback block will have access to the sender and the
|
130
|
-
# including the command
|
137
|
+
# callback block will have access to the sender and the parameter(s) (not
|
138
|
+
# including the command itself), and should either return a String response
|
131
139
|
# or +nil+. If a callback block returns a String response, the response will
|
132
140
|
# be delivered to the Jabber id that issued the command.
|
133
141
|
#
|
@@ -138,8 +146,8 @@ module Jabber
|
|
138
146
|
# add_command(
|
139
147
|
# :syntax => 'puts <string>',
|
140
148
|
# :description => 'Write something to $stdout',
|
141
|
-
# :regex => /^puts\s
|
142
|
-
# :alias => [ :syntax => 'p <string>', :regex => /^p\s
|
149
|
+
# :regex => /^puts\s+(.+)$/,
|
150
|
+
# :alias => [ :syntax => 'p <string>', :regex => /^p\s+(.+)$/ ]
|
143
151
|
# ) do |sender, message|
|
144
152
|
# puts "#{sender} says #{message}."
|
145
153
|
# "'#{message}' written to $stdout."
|
@@ -150,10 +158,10 @@ module Jabber
|
|
150
158
|
# add_command(
|
151
159
|
# :syntax => 'puts! <string>',
|
152
160
|
# :description => 'Write something to $stdout (without response)',
|
153
|
-
# :regex => /^puts!\s
|
154
|
-
# :alias => [
|
155
|
-
# { :syntax => 'p! <string>', :regex => /^p!\s
|
156
|
-
# { :syntax => '! <string>', :regex => /^!\s
|
161
|
+
# :regex => /^puts!\s+(.+)$/,
|
162
|
+
# :alias => [
|
163
|
+
# { :syntax => 'p! <string>', :regex => /^p!\s+(.+)$/ },
|
164
|
+
# { :syntax => '! <string>', :regex => /^!\s+(.+)$/ }
|
157
165
|
# ]
|
158
166
|
# ) do |sender, message|
|
159
167
|
# puts "#{sender} says #{message}."
|
@@ -312,7 +320,7 @@ module Jabber
|
|
312
320
|
# Commands are sorted alphabetically by name, and are displayed according
|
313
321
|
# to the bot's and the commands's _public_ attribute.
|
314
322
|
def help_message(sender, command_name) #:nodoc:
|
315
|
-
if command_name.nil?
|
323
|
+
if command_name.nil? || command_name.length == 0
|
316
324
|
# Display help for all commands
|
317
325
|
help_message = "I understand the following commands:\n\n"
|
318
326
|
|
@@ -320,7 +328,7 @@ module Jabber
|
|
320
328
|
# Thank you, Hash.sort
|
321
329
|
command = command[1]
|
322
330
|
|
323
|
-
if !command[:is_alias]
|
331
|
+
if !command[:is_alias] && (command[:is_public] || master?(sender))
|
324
332
|
command[:syntax].each { |syntax| help_message += "#{syntax}\n" }
|
325
333
|
help_message += " #{command[:description]}\n\n"
|
326
334
|
end
|
@@ -344,28 +352,31 @@ module Jabber
|
|
344
352
|
|
345
353
|
# Parses the given command message for the presence of a known command by
|
346
354
|
# testing it against each known command's regex. If a known command is
|
347
|
-
# found, the command parameters are
|
348
|
-
#
|
355
|
+
# found, the command parameters are parsed from groups defined in the
|
356
|
+
# regex, if any. They are passed on to the callback block this way:
|
357
|
+
# +nil+ if there's no parameter, a String if there's just one occurrence,
|
358
|
+
# or an Array if there's more than one occurence.
|
359
|
+
#
|
360
|
+
# If the callback returns a non- +nil+ value, it will be delivered to the
|
349
361
|
# sender.
|
350
362
|
#
|
351
363
|
# If an unkown command is found, the bot will default to displaying the
|
352
|
-
# help message.
|
353
|
-
#
|
364
|
+
# help message. You can disable this by setting +:misunderstood_message+
|
365
|
+
# to false in the bot configuration.
|
354
366
|
#
|
355
367
|
# If the bot has not been made public, commands from anyone other than the
|
356
368
|
# bot master(s) will be silently ignored.
|
357
369
|
def parse_command(sender, message) #:nodoc:
|
358
|
-
is_master = master?
|
370
|
+
is_master = master?(sender)
|
359
371
|
|
360
|
-
if @config[:is_public]
|
372
|
+
if @config[:is_public] || is_master
|
361
373
|
@commands[:spec].each do |command|
|
362
|
-
if command[:is_public]
|
363
|
-
|
364
|
-
params = nil
|
374
|
+
if command[:is_public] || is_master
|
375
|
+
match = message.strip.match(command[:regex])
|
365
376
|
|
366
|
-
|
367
|
-
|
368
|
-
|
377
|
+
unless match.nil?
|
378
|
+
params = match.captures # Pass an array,
|
379
|
+
params = params.pop if params.count < 2 # a string, or nil.
|
369
380
|
|
370
381
|
response = command[:callback].call(sender, params)
|
371
382
|
deliver(sender, response) unless response.nil?
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jabber-bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 3
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brett Stimmerman
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-15 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: xmpp4r-simple
|