mudgangster

Tiny, scriptable MUD client
Log | Files | Refs | README

intercept.lua (871B)


      1 local Intercepts = { }
      2 
      3 local function doIntercept( command )
      4 	for i = 1, #Intercepts do
      5 		local intercept = Intercepts[ i ]
      6 
      7 		if intercept.enabled then
      8 			local ok, err = xpcall( string.gsub, debug.traceback, command, intercept.pattern, intercept.callback )
      9 
     10 			if not ok then
     11 				mud.print( "\n#s> intercept callback failed: %s", err )
     12 			end
     13 		end
     14 	end
     15 end
     16 
     17 function mud.intercept( pattern, callback, disabled )
     18 	enforce( pattern, "pattern", "string" )
     19 	enforce( callback, "callback", "function" )
     20 	enforce( disabled, "disabled", "boolean", "nil" )
     21 
     22 	local intercept = {
     23 		pattern = pattern,
     24 		callback = callback,
     25 
     26 		enabled = not disabled,
     27 
     28 		enable = function( self )
     29 			self.enabled = true
     30 		end,
     31 		disable = function( self )
     32 			self.enabled = false
     33 		end,
     34 	}
     35 
     36 	table.insert( Intercepts, intercept )
     37 
     38 	return intercept
     39 end
     40 
     41 return {
     42 	doIntercept = doIntercept,
     43 }