# File lib/rbot/core/utils/extends.rb, line 409
        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
            # the created message will reply to the originating message
            class << new_m
              self
            end.send(:define_method, :reply) do |*args|
              debug "replying to '#{from.message}' with #{args.first}"
              from.reply(*args)
            end
            # the created message will follow originating message's in_thread
            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