Sha256: e87814bc1779fe77ff9f32cd0bb100253d4f6b88b1d5b83c41264bf04b2d1b1f

Contents?: true

Size: 1.05 KB

Versions: 5

Compression:

Stored size: 1.05 KB

Contents

module Safe; end
class << Safe
   def safe(code, sandbox=nil)
     error = nil

     begin
       $-w = nil
       sandbox ||= Object.new.taint
       yield(sandbox) if block_given?

       $SAFE = 5
       value = eval(code, sandbox.send(:binding))
       result = Marshal.load(Marshal.dump(value))
     rescue Exception => error
       error = Marshal.load(Marshal.dump(error))
     end

     return result, error
   end
end

def safe(*args, &block)
  unless args.first =~ /EM|EventMachine/
    Safe::safe(*args, &block)
  end
end

class Eval
  include Muzang::Plugins::Helpers

  def initialize(bot)
    @bot = bot
  end

  def call(connection, message)
    on_channel(message) do
      match(message, /^\% (.*)/) do |match|
        operation = proc do
          safe(match[1])
        end
        callback = proc do |tuple|
          result, error = tuple
          connection.msg(message.channel, "#{result}") if result
          connection.msg(message.channel, "Error: #{error}") if error
        end
        EM.defer(operation, callback)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
muzang-plugins-1.1.4 lib/muzang-plugins/muzang-eval.rb
muzang-plugins-1.1.3 lib/muzang-plugins/muzang-eval.rb
muzang-plugins-1.1.2 lib/muzang-plugins/muzang-eval.rb
muzang-plugins-1.1.1 lib/muzang-plugins/muzang-eval.rb
muzang-plugins-1.1.0 lib/muzang-plugins/muzang-eval.rb