end
def save
- FileUtils.mkdir_p(@data_path) unless FileTest.directory?(@data_path)
+ FileUtils.mkdir_p(@data_path)
Utils.safe_save(@data_file) {|f| f.write @aliases.to_yaml}
end
# each alias is implemented by adding a message map, whose handler creates a message
# containing the aliased command
- command.grep(/<(\w+)>/) {$1}.to_set ==
- text.grep(/(?:^|\s)[:*](\w+)(?:\s|$)/) {$1}.to_set or
+ command.scan(/<(\w+)>/).flatten.to_set ==
+ text.split.grep(/\A[:*](\w+)\Z/) {$1}.to_set or
raise AliasDefinitionError.new(_('The arguments in alias must match the substitutions in command, and vice versa'))
+ begin
+ map text, :action => :"alias_handle<#{text}>", :auth_path => 'run'
+ rescue
+ raise AliasDefinitionError.new(_('Error mapping %{text} as command: %{error}') %
+ {:text => text, :error => $!})
+ end
@aliases[text] = command
- map text, :action => :"alias_handle<#{text}>", :auth_path => 'run'
end
def respond_to?(name, include_private=false)
def method_missing(name, *args, &block)
if name.to_s =~ /\Aalias_handle<(.+)>\Z/
+ text = $1
m, params = args
# messages created by alias handler will have a depth method, which returns the
# depth of "recursion" caused by the message
return
end
- command = @aliases[$1]
+ command = @aliases[text]
if command
# create a fake message containing the intended command
new_msg = PrivMessage.new(@bot, m.server, m.server.user(m.source), m.target,
- command.gsub(/<(\w+)>/) {|arg| params[:"#{$1}"].to_s})
+ command.gsub(/<(\w+)>/) {|arg| params[:"#{$1}"].to_s})
# tag incremented depth on the message
class << new_msg
self
@bot.plugins.privmsg(new_msg)
else
- m.reply _("Error handling the alias, the command is not defined")
+ m.reply(_("Error handling the alias, The alias %{text} is not defined or has beeen removed. I will stop responding to it after rescan,") %
+ {:text => text})
end
else
super(name, *args, &block)