def fake_message(string, opts={})
if from = opts[:from]
o = {
:bot => from.bot, :server => from.server, :source => from.source,
:target => from.target, :class => from.class, :delegate => true,
:depth => from.recurse_depth + 1
}.merge(opts)
else
o = {
:bot => @bot, :server => @bot.server, :target => @bot.myself,
:class => PrivMessage, :delegate => true, :depth => 1
}.merge(opts)
end
raise RecurseTooDeep if o[:depth] > MAX_RECURSE_DEPTH
new_m = o[:class].new(o[:bot], o[:server], o[:source], o[:target], string)
new_m.recurse_depth = o[:depth]
if from
class << new_m
self
end.send(:define_method, :reply) do |*args|
debug "replying to '#{from.message}' with #{args.first}"
from.reply(*args)
end
new_m.in_thread = from.in_thread if from.respond_to?(:in_thread)
end
return new_m unless o[:delegate]
method = o[:class].to_s.gsub(/^Irc::|Message$/,'').downcase
method = 'privmsg' if method == 'priv'
o[:bot].plugins.irc_delegate(method, new_m)
end