Yeah, looking back, I now see I'm a complete idiot haha:
function ulx.impersonate( calling_ply, target_plys, msg )
for k,v in pairs( target_plys ) do
v:ConCommand( "say " .. msg .. "" )
end
ulx.fancyLogAdmin( calling_ply, true, "#A impersonated #T", target_plys )
end
local impersonate = ulx.command( CATEGORY_NAME, "ulx impersonate", ulx.impersonate, "!imp" )
impersonate:addParam{ type=ULib.cmds.PlayersArg }
impersonate:addParam{ type=ULib.cmds.StringArg, hint="string", ULib.cmds.takeRestOfLine }
impersonate:addParam{ type=ULib.cmds.BoolArg, invisible=true }
impersonate:defaultAccess( ULib.ACCESS_SUPERADMIN )
impersonate:help( "Impersonates a player." )